求一个统计文本单词数,频率的程序!!
题目描述:
从硬盘上读取一文本文件(一篇英语文章),将这篇文章的内容使用适当的数据结构保存起来,能够方便的统计出各个单词出现的频率、和查询特定的单词。
在主函数中实现下列控制命令
openfile <输入文件名>
display 显示文件单词统计结果
find <查询的单词>
quit
对于执行失败的命令,给出相应的提示信息。
操作过程:
1)打开文件
command:
openfile <输入文件名>
2)显示文件统计结果
command:
display
输出结果:显示各个单词出现的频率并且降序排列: <单词> <次数> <频率>
3)查询单词
cmmand:
find <查询的单词>
输出结果:
<段序号> - <句序号> - <单词序号>
<段序号> - <句序号> - <单词序号>
<段序号> - <句序号> - <单词序号>
共出现了 <单词个数> 次
4)退出
command:
quit
5)显示帮助
command:
help
输出结果:
openfile <输入文件名>
display 显示单词统计结果
find <查询的单词>
quit 退出
考察点:
1)对象的继承和使用
2)对象的构造和析构
3)控制台的输入和输出
4)程序的调试和运行
提示:
1)将文章分为词、句、段等三级结构,定义三个对象保存词、句、段。单词的分割符是空格、分号、顿号(ascii码0x20,0x2D、0x3B),句子的分割符是句号、问号和感叹号(ascii码0x21、0x2E、0x2F),段落的分割符是回车(ascii码0x0D 0x0A),其它符号省略。
2)对象保存可以使用Vector或动态数组
[解决办法]
这里有个可以参考的,就是在 查找功能中基本类似处理:
/*把cailiao.txt中含有cidian.txt中的字的词统计出来,如:含有“程”的词有:程序、程度、程序员等*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *cidian,*cailiao,*output;//输入输出文件指针,output是生成的结果
char *temp_cidian,*temp_cailiao,buf_cidian[10],buf_cailiao[64],*p;
int i=0,j=0,k=1,l=0;
cidian=fopen( "cidian.txt ", "rt ");
cailiao=fopen( "cailiao.txt ", "rt ");
output=fopen( "output.txt ", "w ");
while(!feof(cidian) ){
temp_cidian=fgets(buf_cidian,10,cidian);
*(buf_cidian+2)= '\0 ';//去掉词典词后的换行
fprintf(output, "含有\ "%s\ "的词有:\n ",buf_cidian);
k++;
fseek(cailiao,0,SEEK_SET);
while(!feof(cailiao) ){//每次循环往结果里写一个词
temp_cailiao=fgets(buf_cailiao,32,cailiao);
p=strstr(buf_cailiao,buf_cidian);
if(p){
i++;
fprintf(output, "%s ",temp_cailiao);
}
}
fprintf(output, "共%d个 ",i);//统计个数
i=0;
fprintf(output, "\n\n\n ");
}
system( "PAUSE ");
return 0;
}