此作业的要求参见https://edu.cnblogs.com/campus/nenu/2018fall/homework/2126
词频统计
程序需求:
从文件中读取字符串,摘取其中的单词并统计单词数量。可以从控制台读取文件名,还可以从控制台读取目录名批量统计,还可以重定向输出。
代码实现:
我的代码发布在:https://git.coding.net/wangyupan/fist-program.git
1.提取输入的单词,统计单词数量。
long long total=0; long long num=0; fp=fopen(strtemp,"r"); freopen(strtemp,"r",stdin); while(!feof(fp)) { fscanf(fp,"%s",str); int len=strlen(str); int j=0; for(int i=0; i='A'&&str[i]<='Z') { str[i]+=32; } if(str[i]>='a'&&str[i]<='z') { str1[j++]=str[i]; } else { str1[j]='\0'; if(str1[0]=='\0') continue; else total++; bool flag=true; for(int i=0; i
2.按照出现的频次对单词排序。
bool cmp(word a,word b){ if(a.cnt>b.cnt) return true; return false;}sort(Word,Word+num,cmp);
3.对统计完的单词重定向输出,单词数量过大时,只输出前二十个。
freopen("out.txt","a+",stdout); if(mode==2){ printf("%s\n",strtemp); printf("\n"); } if(num>20) num=20; printf("total %ld\n",total); for(int i=0; i
4.程序的main函数,控制文件名和目录名的输入。
int main(int argc, char *argv[]){ struct _finddata_t fa; long fHandle; /*printf("Mode:1为文件,2为文件夹.\n"); printf("请选择模式:"); scanf("%d",&mode);*/ char string3[30]; mode=1; int id; if(argc==2) { id=1; strcpy(string3,argv[1]); if(string3[1]==':') mode=2; } if(argc==3) id=2; if(argc==4) id=3; char string1[30]; char string2[30]; if(mode==1) { //printf("请输入文件名:"); //scanf("%s",string1); strcpy(string1,argv[id]); int len=strlen(string1); strncpy(string2,&string1[len-4],4); string2[4]='\0'; if(strcmp(string2,".txt")!=0){ strcat(string1,".txt"); } counter(string1); } else if(mode==2) { //printf("请输入文件夹的名字:"); char fileN[30]; strcpy(fileN,argv[1]); strcat(fileN,"\\*.txt"); if((fHandle=_findfirst(fileN,&fa))==-1L) { printf("当前目录下没有txt文件\n"); } do { counter(fa.name); } while(_findnext(fHandle,&fa)==0); _findclose(fHandle); } fclose(fp); return 0;}
功能测试:
功能1 小文件输入。
功能2 支持命令行输入英文作品的文件名。
功能3 支持命令行输入存储有英文作品文件的目录名,批量统计。
功能4 实现重定向
PSP
PSP阶段 | 预计花费时间(min) | 实际花费实际(min) | 花费时间差距(min) | 原因 |
功能1:小文件输入 | 52 | 74 | 22 | 读取字符串时,统计错误,修改程序逻辑比较花费时间。 |
功能2:支持命令行输入英文作品的文件名 | 17 | 58 | 41 | 只有英文名,不是*.txt文件,以前没接触过,查阅资料花费了一些时间。数组发生越界,调试时间过长。 |
功能3:支持命令行输入存储有英文作品文件的目录名,批量统计 | 13 | 36 | 23 | 读取目录名也没遇到过,处理起来不太顺畅,学习了好长时间相关博客 |
功能4:实现重定向 | 21 | 13 | 8 | 重定向向潘世维同学进行了请教,实现的较快。 |