统计英文文本文档中前十个出现频率最多的单词

写一个程序:统计英文文本文档中前十个出现频率最多的单词

语言: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;
}

运行结果:

 

以上是博客内容

谢谢!

 

posted @ 2014-03-02 13:30  20112807  阅读(744)  评论(1编辑  收藏  举报