#include#includeint main()
{
int count[26]={0};
char ch=0;
int maxc=0;
while((ch=getchar())!='\n')
{
if(++count[ch-97]>=count[maxc])
{
maxc=ch-97;
}
}
printf("%c\n%d",maxc+97,count[maxc]);
return 0;
}
初始化:?創(chuàng)建字母表count,巧妙地串聯(lián)起了單詞順序,主要作用是記錄單詞出現(xiàn)的個數(shù)
解釋:我們已知ASCII碼中,小寫的字母a之后的ASCII碼為97,98....后面的代碼中將輸入的字符ch-97,我們可知'a'-97=0,'b'-97=1,'c'-97=2....
即作者意圖將count創(chuàng)立為count[0]表示a,count[1]表示b,count[2]表示c以此類推
數(shù)組內(nèi)部則統(tǒng)計各個字母出現(xiàn)的個數(shù)
ch用來遍歷
maxc記錄出現(xiàn)最多次的單詞,作為輸出內(nèi)容的一部分(原變量名為maxInside,我改成了maxc,意思是maxchar 大的字符,這個因人而異,但是有一個好的變量名稱習(xí)慣是很必要的!)
初始化為0,在下一步中默認(rèn)為count[0],即第一個字母a
遍歷過程:while((ch=getchar())!='\n')
{
if(++count[ch-97]>count[maxc])
{
maxc=ch-97;
}
循環(huán)條件為? ch接收的getchar函數(shù)讀取的字符不為回車符?
進(jìn)入if條件后,先對出現(xiàn)的字符進(jìn)行計數(shù):? ++count[ch-97],前置++
然后對其進(jìn)行比較出現(xiàn)次數(shù)的大小判斷:
第一次進(jìn)入時:maxc為0,即count[0],表示的是第一個字母a
如果ch-97>=maxc,即 '輸入字母'>='a'? ?則將最多次數(shù)的字母的位置記錄為maxc
? 因為是前置++,所以第一次肯定更新maxc
?????除非是a,因為count[0]=count[0]
后面遍歷的情況:
因字符而異啦
進(jìn)入條件先對讀取字符的次數(shù)加一,然后判斷
如果讀取的字符出現(xiàn)的次數(shù) 大于 目前出現(xiàn)次數(shù)最多的字符
更新 maxc
輸出過程:printf("%c\n%d",maxc+97,count[maxc]);
因為maxc的大小和ch-97是配合起來的,哪怕是初始化,當(dāng)maxc=0時,maxc+97為a的ASCII碼值
所以這里直接輸出字符%c,按照char類型輸出maxc+97? 及%d,按照Int類型輸出數(shù)組的內(nèi)容count[maxc]即出現(xiàn)最多的字符
第二個代碼解析:?#include#includeint main(int argc, char *argv[])
{
// 請在此輸入您的代碼
int count[26]={0},max=0,i;
char ch;
while((ch=getchar())!='\n')
count[ch-'a']++;
for(i=1;i<26;i++)
if(count[i]>count[max])
max=i;
printf("%c\n%d",max+'a',count[max]);
return 0;
}
這個寫的很清晰很簡單,但是它不如第一個簡約:
1.先while循環(huán) 進(jìn)行字母出現(xiàn)次數(shù) 計數(shù)
2.進(jìn)行for循環(huán)遍歷,看看哪個出現(xiàn)的字母個數(shù)最多
這里需要注意的點是: i=1,它沒有從0開始
? 因為第一次進(jìn)入后count[1]先和count[max]比較,此時的max=0,很細(xì)節(jié)的優(yōu)化
3.輸出
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧