此作业的要求参见[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.部分功能没有充足的时间实现和完善。