第一次软件工程作业 编程实现英文文章中出现频率最高的10各个词。
写程序:2014/3/2 3:00pm-5:00pm , 7:00-10:30pm
由于电脑出现问题和断网的原因,知道现在才传上自己博客。
代码的内容主要用的是文件的读取和排序功能,由于时间比较仓促,必定有许多漏洞,请大家批评指正。
以下是相应程序具体函数实现的功能:
1 //1.读取文件,查找相应的单词 2 3 if((fp=fopen("case1.in","r"))==NULL ) 4 //打开文件 5 { 6 cout<<”can not open the file!”; 7 return 1; 8 } //打开不了 9 while((ch=fgetc(fp))!=EOF) 10 { 11 if((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z')||ch=='-'||ch=='\'') //遇到 字母, '-' , 缩写号 ' 时 12 { if(flag==1) //判断flag直到遇到单词 i自增使指向下一个数组 13 i++; 14 if(ch>='A'&&ch<='Z') //大写换小写 15 { 16 ch=ch+32; 17 } 18 s[i][j]=ch; 19 j++; 20 flag=0; //单词未结束flag为0 21 } 22 else 23 { 24 j=0; 25 flag=1; //遇到不是单词,标记为1 26 } 27 } 28 strcpy(s2[0],s[0]); //将s[0]复制到s2[0]中 29 for (m=1;m<=i;m++) //从s[1]开始 直到 s[i] 30 { 31 for(n=0;n<m;n++) //将s[m]跟他前面的比较.看看是否重复 32 { 33 if(strcmp(s[m],s[n])==0) 34 { 35 word=1;//重复 word标记为1 36 } 37 38 } 39 if(word==0) //不重复,将s[m]复制到s2[k]中 40 { 41 strcpy(s2[k],s[m]); 42 k++; 43 } 44 word=0;//比较完后将word重置 45 } 46 for(m=0;m<k;m++) 47 { 48 for(n=0;n<=i;n++) 49 { 50 if(strcmp(s2[m],s[n])==0) 51 //s2[m]中的单词是不重复的.用s[n]里面的单词逐个对比.遇到相同count[m]自+1; 52 count[m]=count[m]+1; 53 } 54 } 55 56 57 //2.对高频单词进行排序 58 59 cout<<”出现频率最高的10个词依次是:”<<endl; 60 for(m=0;m<=k&&m<10;m++) //单词数小于10个或k(k<10时)个执行循环 61 { 62 max=0;//重置max 63 for(n=1;n<=i;n++) 64 { 65 if(count[max]==count[n]) //若单词出现次数相同 .按字典顺序排 66 { 67 if(strcmp(s2[max],s2[n])>0) 68 max=n; 69 } 70 if(count[max]<count[n]) 71 max=n; 72 } 73 cout<<s2[max]<<” ”<<count[max]<<endl; 74 count[max]=0;//将输出过的单词出现次数清0; 75 76 }
运行结果: