最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c語言實現(xiàn)詞頻統(tǒng)計的簡單實例

 更新時間:2016年09月06日 14:44:04   投稿:jingxian  
下面小編就為大家?guī)硪黄猚語言實現(xiàn)詞頻統(tǒng)計的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

需求:

1.設(shè)計一個詞頻統(tǒng)計軟件,統(tǒng)計給定英文文章的單詞頻率。

2.文章中包含的標點不計入統(tǒng)計。

3.將統(tǒng)計結(jié)果以從大到小的排序方式輸出。

設(shè)計:

1.因為是跨專業(yè)0.0···并不會c++和java,只能用僅學(xué)過的C語言進行編寫,還是挺費勁的。

2.定義一個包含單詞和頻率兩個成員的結(jié)構(gòu)體來統(tǒng)計詞頻(進行了動態(tài)分配內(nèi)存,可以處理較大文本)。

3.使用fopen函數(shù)讀取指定的文檔。

4.使用fgetc函數(shù)獲取字符,再根據(jù)取得的字符是否是字母進行不同的處理。

5.采用快速排序法對統(tǒng)計結(jié)果進行排序。

5.將整個統(tǒng)計結(jié)果循環(huán)輸出。

部分代碼:

結(jié)構(gòu)體定義:

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

分配初始內(nèi)存:

struct fre_word *w;
  w=(struct fre_word *)malloc(100*p*sizeof(struct fre_word));//給結(jié)構(gòu)體分配初始內(nèi)存

讀取文本:

printf("輸入讀入文件的名字:");
  scanf("%s", filename);                   //輸入需要統(tǒng)計詞頻的文件名
  if((fp=fopen(filename, "r"))==NULL)
  {
    printf("無法打開文件\n");
    exit(0);
  }

單詞匹配:

/****************將單詞出現(xiàn)次數(shù)設(shè)置為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;                         //設(shè)標志位判斷是否存在連續(xù)標點或者空格
    }
    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--;
        }
      }
    }
/****************動態(tài)分配內(nèi)存****************************************/
    if(i==(p*100))                           //用i判斷當前內(nèi)存已滿
    {
      p++;
      w=(struct fre_word*)realloc(w,100*p*(sizeof(struct fre_word)));
      for(n=i;n<=100*p;n++)                      //給新分配內(nèi)存的結(jié)構(gòu)體賦初值
        (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); 
}

結(jié)果輸出:

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

測試用例:

看了之前同學(xué)的博客以及老師的評論,就使用了較長的文本進行測試,用的是奧巴馬就職演講稿。

部分測試結(jié)果:

以上這篇c語言實現(xiàn)詞頻統(tǒng)計的簡單實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++深入探索內(nèi)聯(lián)函數(shù)inline與auto關(guān)鍵字的使用

    C++深入探索內(nèi)聯(lián)函數(shù)inline與auto關(guān)鍵字的使用

    本篇文章主要包括內(nèi)聯(lián)函數(shù)和auto關(guān)鍵字。其中,內(nèi)斂函數(shù)包括概念,特性等;auto關(guān)鍵字的使用規(guī)則,使用場景等,接下來讓我們深入了解
    2022-05-05
  • 基于C++實現(xiàn)五子棋小游戲

    基于C++實現(xiàn)五子棋小游戲

    這篇文章主要為大家詳細介紹了基于C++實現(xiàn)五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++實現(xiàn)數(shù)據(jù)文件存儲與加載

    C++實現(xiàn)數(shù)據(jù)文件存儲與加載

    這篇文章主要為大家詳細介紹了C++實現(xiàn)數(shù)據(jù)文件存儲與加載,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • opencv求解區(qū)域的內(nèi)接矩形

    opencv求解區(qū)域的內(nèi)接矩形

    這篇文章主要為大家詳細介紹了opencv求解區(qū)域的內(nèi)接矩形,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • QT中QColorDialog開發(fā)實例

    QT中QColorDialog開發(fā)實例

    QColorDialog是Qt框架中用于選擇顏色的對話框類,本文主要介紹了QT中QColorDialog開發(fā)實例,具有一定的參考價值,感興趣的可以了解一下
    2023-11-11
  • C語言求解最長公共子字符串問題及相關(guān)的算法分析

    C語言求解最長公共子字符串問題及相關(guān)的算法分析

    最長公共子字符串問題即是求一個字符串在另一個字符串中出現(xiàn)的連續(xù)最多字符,這里我們來看一下面試中經(jīng)常出現(xiàn)的C語言求解最長公共子字符串問題及相關(guān)的算法分析
    2016-06-06
  • C語言實現(xiàn)掃雷程序

    C語言實現(xiàn)掃雷程序

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)掃雷程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++使用數(shù)組來實現(xiàn)哈夫曼樹

    C++使用數(shù)組來實現(xiàn)哈夫曼樹

    給定N個權(quán)值作為N個葉子結(jié)點,構(gòu)造一棵二叉樹,若該樹的帶權(quán)路徑長度達到最小,稱這樣的二叉樹為最優(yōu)二叉樹,也稱為哈夫曼樹(Huffman?Tree)。哈夫曼樹是帶權(quán)路徑長度最短的樹,權(quán)值較大的結(jié)點離根較近
    2022-05-05
  • Windows消息傳遞機制詳解

    Windows消息傳遞機制詳解

    這篇文章主要介紹了Windows消息傳遞機制,有助于讀者更好的理解windows編程的消息機制,需要的朋友可以參考下
    2014-07-07
  • C++如何切割String對象的方法

    C++如何切割String對象的方法

    C++相較于Java,Python 并沒有提供的字符串分割的函數(shù)split,因此需要自己進行編寫,本文主要介紹了C++如何切割String對象的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05

最新評論

宁安市| 乳山市| 五莲县| 克拉玛依市| 正镶白旗| 太和县| 平湖市| 铁岭市| 吴堡县| 桃江县| 灵台县| 宁陕县| 娄底市| 从化市| 凌源市| 府谷县| 阿拉善右旗| 柏乡县| 比如县| 普格县| 雅安市| 太湖县| 海晏县| 福安市| 紫阳县| 云霄县| 枣阳市| 盖州市| 绥宁县| 涞源县| 漾濞| 太和县| 石门县| 宣武区| 呼图壁县| 河南省| 弥渡县| 嘉峪关市| 贵州省| 叶城县| 石阡县|