C語(yǔ)言統(tǒng)計(jì)輸入字符各個(gè)字母出現(xiàn)頻率的解題思路
本文跟大家分享的是編寫一個(gè)程序,能夠計(jì)算輸入字符各個(gè)字母出現(xiàn)的頻率,具體如下
先跟大家展示一下最終結(jié)果:

剛剛接手題目的時(shí)候,我想得很復(fù)雜,因?yàn)?6個(gè)字母中有大小寫嘛,小寫a~z,大寫A~Z
但是,無(wú)論是大寫還是小寫,字母都只有26個(gè),在此,當(dāng)輸入大寫字母的時(shí)候,我們就將其轉(zhuǎn)換為小寫就ok啦
大寫字母轉(zhuǎn)換為小寫字母,有個(gè)很方便的函數(shù)tolow(),在ctype.h中,詳情文章末。
看過(guò)前一篇文章《c語(yǔ)言:計(jì)算輸入字符個(gè)數(shù)》中使用數(shù)組統(tǒng)計(jì)單詞長(zhǎng)度的方法,在統(tǒng)計(jì)字母的個(gè)數(shù)的時(shí)候,依舊可以,只不過(guò)有些"小技巧"。
大小寫轉(zhuǎn)換與計(jì)算
if(isalpha(c)) /*詳情見文末*/
{
c = tolower(c); //大寫轉(zhuǎn)換為小寫
++char_count[c-'a'];
}
通過(guò)上面的代碼將26個(gè)字母出現(xiàn)的頻率統(tǒng)計(jì)后(都存在數(shù)組中),再來(lái)打印直方圖,何為直方圖,就是那張圖拉,向上看。
由于要畫直方圖,所以用用到兩個(gè)for循環(huán)語(yǔ)句,通過(guò)觀察可以知道,直方圖的行數(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也知道了,來(lái)畫出直方圖吧:
/*打印直方圖*/
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啦,還差一個(gè)橫坐標(biāo),不然我們咋知道每一列代表的是哪一個(gè)字母呢:
/*打印下標(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個(gè)字母出現(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ì)算輸入字符各個(gè)字母出現(xiàn)頻率的整體解題思路,希望對(duì)大家的學(xué)習(xí)有所幫助。
相關(guān)文章
C語(yǔ)言使用mciSendString實(shí)現(xiàn)播放音樂功能
mciSendString?支持?mp3、wma、wav、mid?等多種媒體格式,使用非常簡(jiǎn)單。這篇文章就來(lái)為大家介紹一下C語(yǔ)言如何使用mciSendString實(shí)現(xiàn)播放音樂功能,需要的可以參考一下2023-02-02
C++關(guān)鍵字thread_local學(xué)習(xí)筆記
這篇文章主要為大家介紹了C++關(guān)鍵字thread_local學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
C語(yǔ)言使用函數(shù)實(shí)現(xiàn)字符串部分復(fù)制問題
這篇文章主要介紹了C語(yǔ)言使用函數(shù)實(shí)現(xiàn)字符串部分復(fù)制問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
OpenCV實(shí)現(xiàn)鼠標(biāo)框選并顯示框選區(qū)域
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)鼠標(biāo)框選并顯示框選區(qū)域,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08

