国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

統計輸入字符各個字母出現頻率的解題思路

2020-05-23 14:16:05
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了統計輸入字符各個字母出現頻率的解題思路,需要的朋友可以參考下

本文跟大家分享的是編寫一個程序,能夠計算輸入字符各個字母出現的頻率,具體如下

先跟大家展示一下最終結果:

統計輸入字符各個字母出現頻率的解題思路

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

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

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

看過前一篇文章《c語言:計算輸入字符個數》中使用數組統計單詞長度的方法,在統計字母的個數的時候,依舊可以,只不過有些"小技巧"。

大小寫轉換與計算

 

 
  1. if(isalpha(c)) /*詳情見文末*/ 
  2. c = tolower(c); //大寫轉換為小寫 
  3. ++char_count[c-'a']; 

通過上面的代碼將26個字母出現的頻率統計后(都存在數組中),再來打印直方圖,何為直方圖,就是那張圖拉,向上看。

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

max如何求呢,看如下代碼:

 

 
  1. max = 0; //初始化 
  2.  
  3. /*找出出現頻率最高的字母*/ 
  4. for(x = 0; x < 26; x++) 
  5. if(char_count[x] > max) 
  6. max = char_count[x]; 
  7. printf("max is %d", max); 

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

 

 
  1. /*打印直方圖*/ 
  2. for(; max > 0; max--) 
  3. for(x = 0; x < 26; x++) 
  4. if(char_count[x] >= max) 
  5. putchar('x'); 
  6. else 
  7. putchar(''); 
  8. putchar('/n'); 

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

 

 
  1. /*打印下標,即abcdefghijklml....*/ 
  2. for(x = 0; x < 26; x++) 
  3. putchar('a'+x); 

完整代碼:

 

 
  1. #include <stdio.h> 
  2. #include <ctype.h> 
  3.  
  4. main() 
  5. int x; //數組下標變量,詳情看代碼 
  6. int max; //出現頻率最高的字母 
  7. int char_count[26]; //26個字母出現字數的統計 
  8. char c; 
  9.  
  10. /*將數組初始化,因為我們還沒有輸入嘛,所以a~z都為0啦*/ 
  11. for( x= 0; x < 26; x++) 
  12. char_count[x] = 0; 
  13.  
  14. while((c = getchar()) != EOF) 
  15. if(isalpha(c)) /*詳情見文末*/ 
  16. c = tolower(c); //大寫轉換為小寫 
  17. ++char_count[c-'a']; 
  18.  
  19. max = 0; //初始化 
  20.  
  21. /*找出出現頻率最高的字母*/ 
  22. for(x = 0; x < 26; x++) 
  23. if(char_count[x] > max) 
  24. max = char_count[x]; 
  25. printf("max is %d", max); 
  26.  
  27. /*打印直方圖*/ 
  28. for(; max > 0; max--) 
  29. for(x = 0; x < 26; x++) 
  30. if(char_count[x] >= max) 
  31. putchar('x'); 
  32. else 
  33. putchar(''); 
  34. putchar('/n'); 
  35. /*打印下標,即abcdefghijklml....*/ 
  36. for(x = 0; x < 26; x++) 
  37. putchar('a'+x); 
  38. return 0; 
  39.  
  40.  

ps:

統計輸入字符各個字母出現頻率的解題思路

以上就是計算輸入字符各個字母出現頻率的整體解題思路,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 许昌市| 景德镇市| 舞钢市| 溧水县| 防城港市| 于都县| 廉江市| 南和县| 新宁县| 大荔县| 湖北省| 连平县| 无为县| 汝州市| 凤台县| 抚宁县| 论坛| 商水县| 威海市| 新干县| 喀什市| 布拖县| 偃师市| 斗六市| 方城县| 政和县| 措美县| 新民市| 通江县| 广西| 安溪县| 绥阳县| 清镇市| 修武县| 高密市| 台江县| 宝鸡市| 亳州市| 宝应县| 松滋市| 巫山县|