第一次软件工程作业 编程实现英文文章中出现频率最高的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 }

运行结果:

posted @ 2014-03-03 13:13  BlessingYou  阅读(207)  评论(2编辑  收藏  举报