思路:a~z二十六个字母在ascll码是连续的,定义数组count[26] ,下标i,让下标 i = ch - ‘a’,如果ch = a , count[0]++,记录的是a字母出现的个数,依次类推。只需要遍历一遍字符串,就可以把字符串的字母出现次数统计出来。
#include <stdio.h>
int main(int argc,char *argv[])
{
int count[26] = {0};
char str[100];
char max_ch = 'a';
int i = 0 , max = 0;
printf("please enter the str: ");
scanf("%s",str);
//使用查表法统计 count[0] 用来统计a count[1]统计b .....
//a~z 自然有序 如果 str[i]='a',则str[i] - 'a' = 0 ,a对应的下标为0
//使用三目运算符把代码写成一行 ? :
while(str[i] != '\0')
++count[str[i]-'a'] > max ? max = count[str[i]-'a'] , max_ch = str[i++] : i++;
/* 拆分以上三目运算符等价以下代码
count[str[i]-'a']++;
if(count[str[i]-'a'] > max)
{
max = count[str[i]-'a'];
max_ch = str[i];
}
i++;
*/
i = 0 ;
while(26>i)
printf("%c --> %d\n",(char)('a'+i),count[i++]);//打印统计结果
printf("max_ch = %c --> %d\n",max_ch,max);
return 0;
}
windows VC6的运行效果: