統(tǒng)計(jì)輸入字符各個字母出現(xiàn)頻率的解題思路
本文跟大家分享的是編寫一個程序,能夠計(jì)算輸入字符各個字母出現(xiàn)的頻率,具體如下
先跟大家展示一下最終結(jié)果:
剛剛接手題目的時候,我想得很復(fù)雜,因?yàn)?6個字母中有大小寫嘛,小寫a~z,大寫A~Z
但是,無論是大寫還是小寫,字母都只有26個,在此,當(dāng)輸入大寫字母的時候,我們就將其轉(zhuǎn)換為小寫就ok啦
大寫字母轉(zhuǎn)換為小寫字母,有個很方便的函數(shù)tolow(),在ctype.h中,詳情文章末。
看過前一篇文章《c語言:計(jì)算輸入字符個數(shù)》中使用數(shù)組統(tǒng)計(jì)單詞長度的方法,在統(tǒng)計(jì)字母的個數(shù)的時候,依舊可以,只不過有些"小技巧"。
大小寫轉(zhuǎn)換與計(jì)算
if(isalpha(c)) /*詳情見文末*/ { c = tolower(c); //大寫轉(zhuǎn)換為小寫 ++char_count[c-'a']; }
通過上面的代碼將26個字母出現(xiàn)的頻率統(tǒng)計(jì)后(都存在數(shù)組中),再來打印直方圖,何為直方圖,就是那張圖拉,向上看。
由于要畫直方圖,所以用用到兩個for循環(huán)語句,通過觀察可以知道,直方圖的行數(shù)由max決定。
max如何求呢,看如下代碼:
max = 0; //初始化 /*找出出現(xiàn)頻率最高的字母*/ for(x = 0; x < 26; x++) { if(char_count[x] > max) { max = char_count[x]; printf("max is %d", max); } }
現(xiàn)在max也知道了,來畫出直方圖吧:
/*打印直方圖*/ for(; max > 0; max--) { for(x = 0; x < 26; x++) { if(char_count[x] >= max) { putchar('x'); } else putchar(''); } putchar('\n'); }
現(xiàn)在一切都o(jì)k啦,還差一個橫坐標(biāo),不然我們咋知道每一列代表的是哪一個字母呢:
/*打印下標(biāo),即abcdefghijklml....*/ for(x = 0; x < 26; x++) { putchar('a'+x); }
完整代碼:
#include <stdio.h> #include <ctype.h> main() { int x; //數(shù)組下標(biāo)變量,詳情看代碼 int max; //出現(xiàn)頻率最高的字母 int char_count[26]; //26個字母出現(xiàn)字?jǐn)?shù)的統(tǒng)計(jì) char c; /*將數(shù)組初始化,因?yàn)槲覀冞€沒有輸入嘛,所以a~z都為0啦*/ for( x= 0; x < 26; x++) { char_count[x] = 0; } while((c = getchar()) != EOF) { if(isalpha(c)) /*詳情見文末*/ { c = tolower(c); //大寫轉(zhuǎn)換為小寫 ++char_count[c-'a']; } } max = 0; //初始化 /*找出出現(xiàn)頻率最高的字母*/ for(x = 0; x < 26; x++) { if(char_count[x] > max) { max = char_count[x]; printf("max is %d", max); } } /*打印直方圖*/ for(; max > 0; max--) { for(x = 0; x < 26; x++) { if(char_count[x] >= max) { putchar('x'); } else putchar(''); } putchar('\n'); } /*打印下標(biāo),即abcdefghijklml....*/ for(x = 0; x < 26; x++) { putchar('a'+x); } return 0; }
ps:
以上就是計(jì)算輸入字符各個字母出現(xiàn)頻率的整體解題思路,希望對大家的學(xué)習(xí)有所幫助。
欄 目:C語言
下一篇:詳解安卓系統(tǒng)中的Android.mk文件
本文標(biāo)題:統(tǒng)計(jì)輸入字符各個字母出現(xiàn)頻率的解題思路
本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/2924.html
您可能感興趣的文章
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用函數(shù)刪除字符
- 01-10深入解析最長公共子串
- 01-10C語言字符串操作總結(jié)大全(超詳細(xì))
- 01-10用c語言根據(jù)可變參數(shù)合成字符串的實(shí)現(xiàn)代碼
- 01-10用32位int型變量表示單引號括起來的四個字符的深入探討
- 01-10如何用C語言去除字符串兩邊的空字符
- 01-10c語言字符數(shù)組與字符串的使用詳解
- 01-10使用C語言遞歸與非遞歸實(shí)現(xiàn)字符串反轉(zhuǎn)函數(shù)char *reverse(char *str
- 01-10c語言中用字符串?dāng)?shù)組顯示菜單的解決方法
- 01-10c++實(shí)現(xiàn)strcat字符串連接庫函數(shù)的方法詳解


閱讀排行
本欄相關(guān)
- 04-02c語言函數(shù)調(diào)用后清空內(nèi)存 c語言調(diào)用
- 04-02func函數(shù)+在C語言 func函數(shù)在c語言中
- 04-02c語言的正則匹配函數(shù) c語言正則表達(dá)
- 04-02c語言用函數(shù)寫分段 用c語言表示分段
- 04-02c語言中對數(shù)函數(shù)的表達(dá)式 c語言中對
- 04-02c語言編寫函數(shù)冒泡排序 c語言冒泡排
- 04-02c語言沒有round函數(shù) round c語言
- 04-02c語言分段函數(shù)怎么求 用c語言求分段
- 04-02C語言中怎么打出三角函數(shù) c語言中怎
- 04-02c語言調(diào)用函數(shù)求fibo C語言調(diào)用函數(shù)求
隨機(jī)閱讀
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10C#中split用法實(shí)例總結(jié)
- 01-10delphi制作wav文件的方法
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 08-05DEDE織夢data目錄下的sessions文件夾有什
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-11ajax實(shí)現(xiàn)頁面的局部加載
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文