c語言 計算輸入字元各個字母出現的頻率思路

2022-03-10 04:57:50 字數 1874 閱讀 2378

同樣也是《c語言程式設計第二版》這本書上面:

2.編寫乙個程式,計算輸入字元各個字母出現的頻率。

最終結果為:

剛剛接手題目的時候,我想得很複雜,因為26個字母中有大小寫嘛,小寫a~z,大寫a~z

但是,無論是大寫還是小寫,字母都只有26個,在此,當輸入大寫字母的時候,我們就將其轉換為小寫就ok啦

大寫字母轉換為小寫字母,有個很方便的函式tolow(),在ctype.h中,詳情文章末。

看過前一篇文章《c語言:計算輸入字元個數》

中使用陣列統計單詞長度的方法,在統計字母的個數的時候,依舊可以,只不過有些"小技巧"。

大小寫轉換與計算

if(isalpha(c)) /*

詳情見文末

*/

通過上面的**將26個字母出現的頻率統計後(都存在陣列中),再來列印直方圖,何為直方圖,就是那張圖拉,向上看。

由於要畫直方圖,所以用用到兩個for迴圈語句,通過觀察可以知道,直方圖的行數由max決定。

max如何求呢,看如下**:

max = 0;    //

初始化/*

找出出現頻率最高的字母

*/for(x = 0; x < 26; x++)

}

現在max也知道了,來畫出直方圖吧:

/*

列印直方圖

*/for(; max > 0; max--)

else

putchar('

');}

putchar('

\n');

}

現在一切都ok啦,還差乙個橫座標,不然我們咋知道每一列代表的是哪乙個字母呢:

/*

列印下標,即abcdefghijklml....

*/for(x = 0; x < 26; x++)

ok,整個程式完成了。

我除錯了好長時間。。。在下面這個地方,結果自己粗心了。。。

while( c = getchar() != eof)

這一行**出錯了,我早了半天都沒有找出來

算了,我直接重寫一遍了

o(∩_∩)o哈哈~

完整**:

1 #include 

2 #include

34 main()

5 16

17while((c = getchar()) != eof)

18

24 }

2526 max = 0; //

初始化27

28/*

找出出現頻率最高的字母

*/29

for(x = 0; x < 26; x++)

30

36 }

3738

/*列印直方圖

*/39

for(; max > 0; max--)

40

47else

48 putchar('

');49 }

50 putchar('

\n');

51 }

52/*

列印下標,即abcdefghijklml....

*/53

for(x = 0; x < 26; x++)

54

57return

0;58

5960 }

本人不擅長寫作,如有錯誤請指正!!

**最好自己敲一遍,別複製貼上。

輸入字串,顯示字串中各個字元出現的次數

題目 任意輸入一字串,之後顯示該字串中每個字元出現的次數。public class countlettertest public static void countletter string s 如果不重複的話,則將ch1中 對應的陣列儲存在ch2中。if repeatchar repeatchar...

計算字串中各個字串出現的次數

比如乙個字串 a,b,a,c,b,b,d 現在我們要統計每個字串出現次數。解決這個問題,我們可以使用泛型集合 dictionary tkey,tvalue 它有乙個key值用來儲存字串和乙個value值,用來儲存字串出現的次數。實現第一步,需要把字串分割為乙個array,需要使用到的函式split ...

統計字串中各個字元出現的次數

import string import random x string.ascii letters string.digits string.punctuation 構造字母 數字 標點符號的字串集合 y random.choice x for i in range 1000 隨機產生乙個具有10...