统计英文文本文档中前十个出现频率最多的单词
写一个程序:统计英文文本文档中前十个出现频率最多的单词
语言:C语言
思路:1.首先创建一个结构体用来存放单词和各单词出现的频率
2.打开文件
3.统计单词和单词出现的频率
4.对单词的频率排序然后输出
源程序:
#include<stdio.h> #include<string.h> struct words { char c[30]; int n; }w[10000]; int main() { FILE *fp; char b[30],ch; int i=0,m=1,j=0,k=0,t=0,f=0; fp=fopen("d://a.txt","r+"); while((ch=fgetc(fp))!=EOF) { if('A'<=ch&&ch<='Z') ch=ch+32; if('a'<=ch && ch<='z') { b[i]=ch; i++; f=1; } else { if(ch=='-'&&(ch=fgetc(fp))=='\n') { f=0; } else { if(f==1) { b[i]='\0'; i=0; f=0; m=0; for(j=0;j<k;j++) { if(strcmp(b,w[j].c)==0) { m=1; break; } } if(m) w[j].n++; else { w[k].n=1;strcpy(w[k].c,b);k++;} } } if('A'<=ch && ch<='Z') ch+=32; if('a'<=ch && ch<='z') { b[i]=ch; i++; f=1; } } } for(i=0;i<k&&i<10;i++) //统计前十个 { t=0; while(w[t].n==0) t++; for(j=1;j<k;j++) { if(w[j].n>w[t].n) t=j; else if(w[j].n==w[t].n) { if(strcmp(w[j].c,w[t].c)<0) t=j; } } printf("%s %d\n",w[t].c,w[t].n); w[t].n=0; } return 0; }
运行结果:
以上是博客内容
谢谢!