首页 > 代码库 > C语言词频统计设计

C语言词频统计设计

项目需求:

1.设计一个词频统计小软件,对给定的英文文章进行单词频率的统计。

2.文章中相应的标点不计入统计。

3.将统计结果以从大到小的排序方式输出。 

 

设计:

1.因为功能相对简单,采用C语言直接进行编写。

2.项目包含的统计功能利用定义的结构体分别对单词和次数进行统计。

3.以字符串的形式读取单词,并对其中的每个字符进行标点分析。

4.统计完成后采用冒泡排序的方式对次数进行排序。

5.将整个统计结果循环输出。

 

部分核心代码:

结构体定义:

typedef struct addup{    char word[50];    int count;}R;

读取文本:

       char temp[50];       R fin[10000]={"\0",0};       fp=fopen("f:/1.txt","r");       while(!feof(fp))       {           fscanf(fp,"%s",temp);           q=strlen(temp);               n++;               for(i=0;i<n;++i)                 if(strcmp(fin[i].word,temp)==0)                {                     fin[i].count++;                      n--;                      break;                 }               if(i>=n)             {                 strcpy(fin[n-1].word,temp);                fin[n-1].count++;               }       }    

标点判定:

for(i=0;i<q;i++){     if(temp[i]==,||temp[i]==.||temp[i]==?||temp[i]==!||temp[i]==")     temp[i]=\0;}

冒泡排序:

for (i=0;i<n;i++)          for (j=0;j<n-i;j++)            {              if (fin[j].count<fin[j+1].count)                 {                 ls[0]=fin[j+1];                 fin[j+1]=fin[j];                 fin[j]=ls[0];                 }            }  

输出结果:

 freopen("f:/2.txt","w",stdout);             for(i=0;i<n;i++)       {         printf("%s : ",fin[i].word);         s=0;            for(j=0;j<fin[i].count;++j)             s++;         printf("%d 次",s);         printf("\n");       }       fclose(stdout);

 

测试用例:

因为词频统计单词重复几率不会过高,因此小篇幅文章不一定能得出好的测试结果,选取了马丁路德金的《I have a dream》演讲稿进行统计。

全篇单词量:1666

技术分享

 

测试结果:

技术分享

C语言词频统计设计