此作业的要求参见[https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583]
词频统计 SPEC 20180918
老五在寝室吹牛他熟读过《鲁滨逊漂流记》,在女生面前吹牛热爱《呼啸山庄》《简爱》和《飘》,在你面前说通读了《战争与和平》。但是,他的四级至今没过。你们几个私下商量,这几本大作的单词量怎么可能低于四级,大家听说你学习《构建之法》,一致推举你写个程序名字叫wf,统计英文作品的单词量并给出每个单词出现的次数,准备用于打脸老五。
希望实现以下效果。以下效果中数字纯属编造。
功能1 小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键
盘在控制台下输入命令。
功能1的思想:使用三个数组用于接收单词,存储单词和统计字数。根据字母的个数进行遍历。每记录一个单词要判断这个单词是否已经出现过,如果没有出现过就记录这个单词,如果出现过这个单词,单词的数量加1.
gets(str2); t=strlen(str2)+1; while(j<t) { for(;str2[j]==32;j++); while(k<N&&str2[j]!=32) str1[i][k++]=str2[j++]; str1[i][k]='\0'; strC[i]=1; for(x=0;x<i;x++) if(strncmp(str1[i],str1[x],N)==0) { strC[x]++; i--; break; } i++; k=0; } printf("total %d\n\n",i); int n=0,max,temp; while(n<i){ max=0; for(int t=0;t<i;t++){ if((strC[t]>max)&&(strC[t]!=0)){ temp=t; max=strC[t]; } } printf("%s,%d\n",str1[temp],strC[temp]); strC[temp]=0; n++; }
为了评估老五的词汇量而不是阅读量,total一项中相同的单词不重复计数数,出现2
次的very计数1次。
因为用过控制台和命令行,你早就知道,上面的">"叫做命令提示符,是操作系统的一部分,而不是你的程序的一部分。
此功能完成后你的经验值+10.
注:由于时间有限,文件过大,要交作业,不能及时处理这个问题,所以对文件进行了改变
功能2 支持命令行输入英文作品的文件名,请老五亲自录入。
功能2的思想:在这个功能模块中用了很多c语言对文件处理的语法,如为读入的文件设置缓冲区,利用文件的路径读文件,为文件分配缓冲区的大小,还要关闭文件等操作。对单词出现的次数多的处理和功能1和实现功能类似。
char *pchBuf = NULL; FILE *fp; int count=0; fp=fopen("word_count_demo.txt","r"); fseek(fp,0,SEEK_END); int nlen=ftell(fp); rewind(fp); pchBuf = (char*) malloc(sizeof(char)*nlen+1); nlen = fread(pchBuf, sizeof(char), nlen, fp); pchBuf[nlen] = '\0'; t=strlen(pchBuf)+1;
功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。
>dir folder
gone_with_the_wand
runbinson
janelove
>wf folder
gone_with_the_wand
total 1234567 words
the 5023
a 4783
love 4572
fire 4322
run 3822
cheat 3023
girls 2783
girl 2572
slave 1322
buy 822
----
runbinson
total 1234567 words
功能3的思想:这个模块的创新点,把文件的路径(这里是相对路径)当成变量传递给fopen,其他部分和功能2,和功能3有重合。
while(gets(path)){ fp=fopen(path,"r"); fseek(fp,0,SEEK_END); int nlen=ftell(fp); rewind(fp); pchBuf = (char*) malloc(sizeof(char)*nlen+1); nlen = fread(pchBuf, sizeof(char), nlen, fp); pchBuf[nlen] = '\0'; printf("%s\n", pchBuf); t=strlen(pchBuf)+1; ... }
功能4 :思考了很久还是不会
总结:
1.实现的功能比较复杂,规模比较大,所以花费的时间比较长。
2.对c语言对文件的读取等操作不熟悉,所以在完成作业的同时,还需要复习以前的知识。
3.部分功能没有充足的时间实现和完善。