程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> c說話完成詞頻統計的簡略實例

c說話完成詞頻統計的簡略實例

編輯:關於C++

c說話完成詞頻統計的簡略實例。本站提示廣大學習愛好者:(c說話完成詞頻統計的簡略實例)文章只能為提供參考,不一定能成為您想要的結果。以下是c說話完成詞頻統計的簡略實例正文


需求:

1.設計一個詞頻統計軟件,統計給定英文文章的單詞頻率。

2.文章中包括的標點不計入統計。

3.將統計成果以從年夜到小的排序方法輸入。

設計:

1.由於是跨專業0.0···其實不會c++和java,只能用僅學過的C說話停止編寫,照樣挺費力的。

2.界說一個包括單詞和頻率兩個成員的構造體來統計詞頻(停止了靜態分派內存,可以處置較年夜文本)。

3.應用fopen函數讀取指定的文檔。

4.應用fgetc函數獲得字符,再依據獲得的字符能否是字母停止分歧的處置。

5.采取疾速排序法對統計成果停止排序。

5.將全部統計成果輪回輸入。

部門代碼:

構造體界說:

struct fre_word
{
  int num;
  char a[18];
}; 

分派初始內存:

struct fre_word *w;
  w=(struct fre_word *)malloc(100*p*sizeof(struct fre_word));//給構造體分派初始內存

讀取文本:

printf("輸出讀入文件的名字:");
  scanf("%s", filename);                   //輸出須要統計詞頻的文件名
  if((fp=fopen(filename, "r"))==NULL)
  {
    printf("沒法翻開文件\n");
    exit(0);
  }

單詞婚配:

/****************將單詞湧現次數設置為1****************************/
  for(i=0;i<100;i++)
  {  
    (w+i)->num=1;
  }
/****************單詞婚配****************************************/
  i=0;
  while(!feof(fp))//文件還沒有讀取終了
  {
    ch=fgetc(fp);
    (w+i)->a[j]='\0';
    if(ch>=65&&ch<=90||ch>=97&&ch<=122)              //ch若為字母則存入
    {
      (w+i)->a[j]=ch;
      j++;
      flag=0;                         //設標記位斷定能否存在持續標點或許空格
    }
    else if(!(ch>=65&&ch<=90||ch>=97&&ch<=122)&&flag==0)    //ch若不是字母且上一個字符為字母
    {    
      i++;
      j=0;
      flag=1;
      for(m=0;m<i-1;m++)                  //婚配單詞,若已存在則num+1
      {
        if(stricmp((w+m)->a,(w+i-1)->a)==0)
        {
          (w+m)->num++;
          i--;
        }
      }
    }
/****************靜態分派內存****************************************/
    if(i==(p*100))                           //用i斷定以後內存已滿
    {
      p++;
      w=(struct fre_word*)realloc(w,100*p*(sizeof(struct fre_word)));
      for(n=i;n<=100*p;n++)                      //給新分派內存的構造體賦初值
        (w+n)->num=1;

    }
  }

疾速排序:

void quick(struct fre_word *f,int i,int j) 
{
  int m,n,temp,k;
  char b[18]; 
  m=i; 
  n=j; 
  k=f[(i+j)/2].num;              //拔取的參照
  do 
  { 
    while(f[m].num>k&&m<j) m++;       // 從左到右找比k小的元素
    while(f[n].num<k&&n>i) n--;       // 從右到左找比k年夜的元素 
    if(m<=n) 
    {                    //若找到且知足前提,則交流 
      temp=f[m].num;
      strcpy(b,f[m].a);
      f[m].num=f[n].num; 
      strcpy(f[m].a,f[n].a);
      f[n].num=temp; 
      strcpy(f[n].a,b);
      m++; 
      n--; 
    } 
  }
  while(m<=n); 
  if(m<j) quick(f,m,j);           //應用遞歸
  if(n>i) quick(f,i,n); 
}

成果輸入:

for(n=0;n<=i;n++)
  {
    printf("文檔中湧現的單詞:");
    printf("%-18s",(w+n)->a);
    printf("其湧現次數為:");
    printf("%d\n",(w+n)->num);
  }

測試用例:

看了之前同窗的博客和先生的評論,就應用了較長的文本停止測試,用的是奧巴馬就職演講稿。

部門測試成果:

以上這篇c說話完成詞頻統計的簡略實例就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved