此作业的要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/6583
代码地址为:https://e.coding.net/Eustia/wf.git
词频统计 SPEC 20180918
1、功能1
小文件输入。 为表明程序能跑,结果真实而不是迫害老五,请他亲自键盘在控制台下输入命令。
1.1 功能的重点难点
(1) 从控制台读取文件,并把文件的内容拆分成一个个的单词。
(2) 拆分后的单词的处理,如何判断其是否为单词,以及对单词出现次数的计数。
1.2 重要代码
void wdcount(char word[]) { bool flag; int i=0; //判断单词是否出现过 for(i=0;i<total;i++) { //如果出现过 if(strcmp(wd[i].s_wd,word)==0) { wd[i].time=wd[i].time+1; return; } } //如果未出现过 strcpy(wd[total].s_wd,word); wd[total].time=wd[total].time+1; total++; return; }
1.3 执行效果截图
2、功能2
支持命令行输入英文作品的文件名,请老五亲自录入。
2.1 功能的重点难点
本功能没有什么难点,重点就是对输入的文件名进行处理,在文件名末尾添加上".txt"然后用功能1里面的函数进行处理即可
2.2 重要代码(因为代码和功能1基本相同,此处给出了判断是否为单词的代码)
void inputwd(char name[]) { fp=fopen(name,"r"); total=0; int i=0; int flag=1;//是否为单词第一个字母 //我认为单词只能由字母 "'" "-"组成,且"'" "-"不能出现在首字母 while(!feof(fp)) { c=fgetc(fp); //首字母 if(flag==1) { if((c>=65&&c<=90)||(c>=97&&c<=122)) { if(c>=65&&c<=90) { c=c+32; } word[i]=c; i++; } flag=0; } //非首字母 else { if((c>=65&&c<=90)||(c>=97&&c<=122)||(c==39)||(c==45)) { if(c>=65&&c<=90) { c=c+32; } word[i]=c; i++; } else { if(i>0) { wdcount(word); memset(word, 0, sizeof(word)); i=0; flag=1; } } } } fclose(fp); fp=NULL; return; }
2.3 执行效果截图
3、功能3
支持命令行输入存储有英文作品文件的目录名,批量统计。
3.1 功能的重点难点
(1) 如何判断输入的名字是否为文件夹
(2) 对文件夹内容的遍历以及文件夹内文件内容的获取
3.2 重要代码
int three(char fname[]) { char name_temp[100];//防止在判断是否为文件夹时由于传入参数的修改导致后续程序无法进行 strcpy(name_temp,fname); _finddata_t fd; long flag,h; strcat(name_temp,"\\*.txt"); h=_findfirst(name_temp,&fd); if(h==-1) { return 1; } else { while(flag!=-1) { printf("%s\n",fd.name); one(fd.name); flag=_findnext(h,&fd); if(flag!=-1) { printf("-----------------\n"); } } _findclose(h); } return 0; }
3.3 执行效果截图
4、功能4
从控制台读入英文单篇作品,这不是为了打脸老五,而是为了向你女朋友炫酷,表明你能提供更适合嵌入脚本中的作品(或者如她所说,不过是更灵活的接口)。
功能4的重点难点就是对输入的重定向,此功能我只完成了一部分,运行的最终效果和题目要求并不一致,我会继续学习相关知识争取完成此功能。以下是我运行出来的效果。
5、psp