字母频率
题目描述:从键盘输入一个字符串(可能含有数字、字母、其他可见字符),输出出现频率最高的英文字母及次数,忽略字母的大小写(如大写A和小写a均视为a)。
例如:
输入:There are 10,000 soldiers in the town.
输入:e 5
输入描述:输入一行字符串,字符串长度不超过1000。
输出描述:按题意输出。
C语言代码
#include <stdio.h>
#include <string.h>
int main()
{
char s[1000], zimu[1000];
gets(s);
int len = strlen(s);
int i, count[1000] = { 0 }, j = 0, lag = 0;
for (i = 0; i < len; i++)
{
if ((s[i] >= 65 && s[i] <= 90) || (s[i] >= 97 && s[i] <= 122))
{
if (s[i] >= 65 && s[i] <= 90) s[i] = s[i] + 32;
if (lag == 0) { zimu[j] = s[i]; lag = 1; count[j] = 1; j++; } //统计字母的数组为空时
else if(lag==1) //统计字母的数组不为空,先匹配是否有相同,在进行添加
{
int in = 0;//判断数组中是否存在该字母
for (int k = 0; k < j; k++)
if (s[i] == zimu[k]) { count[k]++; in = 1; }//字符串前已统计过
if (in == 0) { zimu[j] = s[i]; count[j] = 1; j++; }
}
}
}
int temp = 0, pos = 0;
for (i = 0; i < j; i++)
if (temp < count[i]) { temp = count[i]; pos = i; }
printf("%c %d",s[pos],count[pos]);
return 0;
}
注意将大写字母转换为小写字母。