同樣也是《c語言程式設計第二版》這本書上面:
2.編寫乙個程式,計算輸入字元各個字母出現的頻率。
最終結果為:
剛剛接手題目的時候,我想得很複雜,因為26個字母中有大小寫嘛,小寫a~z,大寫a~z
但是,無論是大寫還是小寫,字母都只有26個,在此,當輸入大寫字母的時候,我們就將其轉換為小寫就ok啦
大寫字母轉換為小寫字母,有個很方便的函式tolow(),在ctype.h中,詳情文章末。
看過前一篇文章《c語言:計算輸入字元個數》
中使用陣列統計單詞長度的方法,在統計字母的個數的時候,依舊可以,只不過有些"小技巧"。
大小寫轉換與計算
if(isalpha(c)) /*通過上面的**將26個字母出現的頻率統計後(都存在陣列中),再來列印直方圖,何為直方圖,就是那張圖拉,向上看。詳情見文末
*/
由於要畫直方圖,所以用用到兩個for迴圈語句,通過觀察可以知道,直方圖的行數由max決定。
max如何求呢,看如下**:
max = 0; //現在max也知道了,來畫出直方圖吧:初始化/*
找出出現頻率最高的字母
*/for(x = 0; x < 26; x++)
}
/*現在一切都ok啦,還差乙個橫座標,不然我們咋知道每一列代表的是哪乙個字母呢:列印直方圖
*/for(; max > 0; max--)
else
putchar('
');}
putchar('
\n');
}
/*ok,整個程式完成了。列印下標,即abcdefghijklml....
*/for(x = 0; x < 26; x++)
我除錯了好長時間。。。在下面這個地方,結果自己粗心了。。。
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...