C語言輸入英文統計單詞的出現的頻率排序

2021-08-01 04:05:07 字數 2744 閱讀 6007

編寫乙個程式,其功能是將使用者輸入的一段英文(注意包含空格、逗號、句號及英文本母)分離出單詞,並以每個單詞出現的次數從高到低輸出單詞極其次數,次數相同的單詞以其對應的字串大小公升序輸出

#include

#include

#define max 100

void getsen(char s);                              //接受輸入句子的函式

void sepra(char s,char w[50][20],char time);    //分離單詞並計數的函式

void sort (char w[50][20]);                         //對計數後排序並輸出的函式

void main()

char sen[max] ;

char word[50][20],time[50];

int i;

memset(time,'0',50);                    //初始化賦值 全為字元零

memset(word,' ',1000);                  //初始化賦值 全為空格

getsen(sen);

sepra(sen,word,time);

for(i=0;i<50;i++)          //陣列

time

的建立是便於資料的轉移

word[i][0]=time[i];

sort(word);

void getsen(char s)                 //該函式接受輸入語句中的字元

printf("please input the sentence :(非英文將會自動除去

)\n");

gets(s);

void sepra(char s,char w[50][20],char time)//該函式用來將字元陣列

s中的標點去掉,分離出單詞,存放在二維陣列

w中,陣列

time與w

有聯絡,用來存放單詞出現次數

int i,j,m,n,p,q,sum,flag,mark[max] = ;

for(i = 0;i初始時

mark值為0

,當輸入的為字母時,

mark為1

,否則為零

if(s[i]>64&&s[i]<91)

s[i] = s[i]+'a'-'a';

if(s[i]>96&&s[i]<123)

mark[i+1] = 1;

else

mark[i+1] = 0;

mark[0] = 0;

for(i = 0,j = 0,m = 1;i表示第

i+1個字元前面是否為字母;

mark[i+1]

表示第i+1

個字元是否為字母

if(mark[i]==0&&mark[i+1]==1)         //大寫字母轉換為小寫,再進行後續判斷

w[j][m++]=s[i];

if(mark[i]==1&&mark[i+1]==1)

w[j][m++]=s[i];

if(mark[i]==1&&mark[i+1]==0)

w[j][m++] = '\0';             //如果第

i+1個字元不是字母,且它前面乙個是字母,則結束這乙個單詞,準備開始接受下乙個單詞 ,並將

m重新設定為1

m = 1;

time[j] = '1';

++j;

for(n = 0;n比較新接受的單詞是否與前面相同

for(q = 1,sum = 0;q<20;q++)

flag = 1;

if(w[n][q]==w[j-1][q])

flag = 0;

sum+=flag;

if(sum==0)                 //如果新接受的單詞與前面相同,則刪除新接受的單詞,並重新接受可能是新單詞的單詞

--j;

time[n] = time[n]+1;

time[j] = '0';

for(p = 0;p<20;p++)

w[j][p] = ' ';

void sort (char w[50][20])

int i ,j,n;

char temp[20],c;

for(i=0;i<50;i++)       //排序部分  選擇排序法

c=w[i][0];              //c為單詞出現次數最大值

for(j=i+1;j<50;j++)

if(cc=w[j][0];              

if(c!=w[i][0])          //交換

for(n=0;n<20;n++)

temp[n]=w[i][n];

for(n=0;n<20;n++)

w[i][n]=w[j][n];

for(n=0;n<20;n++)

w[j][n]=temp[n];

for(i=0;i<50;i++)        //輸出部分

if(w[i][0]!='0')

for(j=1;j<20;j++)

if(w[i][j]!=' ')

printf("%-c",w[i][j]);

printf("(%c) ",w[i][0]);

if(i%4==3)

printf("\n");

c 統計輸入中不同單詞所出現的次數

在看accelerated c 第三章的練習3 3時,要求 編寫乙個程式用於計算在它的輸入中每個不同的單詞所出現的次數 最簡單的方法是用標準庫的map容器來實現,可以定義乙個map。在這裡,我使用了兩個vector容器來實現 include include include using std cou...

C語言資料結構 統計英文文字每個「單詞」出現次數

假設每行文字長度不超過80個字元,每個單詞由空格分隔,單詞長度不超過20個字元。現在要從鍵盤上輸入一段英文文字,當輸入 stop 後,結束輸入過程。先程式設計統計在這段文字中每個單詞出現的個數。通過空格判斷單詞,單詞存放在結構體當中,search函式檢測當前單詞是否為重複出現的單詞 cut函式分隔字...

統計單詞出現的頻率

平時我們在工作的時候需要統計一篇文章或者網頁出現頻率最高的單詞,或者需要統計單詞出現頻率排序。那麼如何完成這個任務了?例如,我們輸入的語句是 hello there this is a test.hello there this was a test,but now it is not.希望得到的公...