一个字符串中可能包含a~z中多个字符串,并且可能会有重复,如 String data ="abcdaaa",这道字符串出现次数醉倒的字母就是a,出现了4次。现在用户输入一个字符串,我们需要求出出现次数最多的字母,并且求出次数,如果 存在字母中出现最多的次数不唯一,但所有出现次数最多的字母及次数都要打印出来。
输入:输入是一行字符串,就是我们所需统计的字符串,例如我们输入 “abcabd”
输出:输出是出现次数最多的字母以及出现次数,二者用空格分开,如果出现最多次数的字母不唯一,按照字母在字符串中出现的顺序,把所有结果打印出来,用换行符将每一行的字母和次数分开
样例输入
abcabd
样例输出
a 2 b 2
问题链接:JSK-134 求出现次数最多的字符
问题描述:(略)
问题分析:
这个题需要先统计各个字符数量,然后找出字符出现最多的次数,再根据次数输出所有出现次数最多的字符。
程序说明:
用C语言编写程序时,数组s[]的长度是个问题,原问题描述中没有指出输入最多多少字符,令人困惑。这就需要稍微长一点。如果用C++编写程序,使用string类声明字符串变量就简单了。
程序中的第27行用来保证程序逻辑的严密性,如果输入的字符是空串,应该是什么也不用输出。
参考链接:(略)
题记:
字符也是可以用来计算的,字符也是整数。
统计与查找是程序中永恒的话题。
AC的C语言程序如下:
/* JSK-134 求出现次数最多的字符 */
#include <stdio.h>
#include <string.h>
#define N 256
#define A 26
char s[N];
int cnt[A];
int main(void)
{
// 读入字符串
scanf("%s", s);
// 统计字符串中字母数量
int i;
memset(cnt, 0, sizeof(cnt));
for(i = 0; s[i]; i++)
cnt[s[i] - 'a']++;
// 找出数量最多的字母
int maxc = 0;
for(i = 0; i < A; i++)
maxc = cnt[i] > maxc ? cnt[i] : maxc;
// 输出结果
if(maxc > 0) {
for(i = 0; i < A; i++)
if(cnt[i] == maxc)
printf("%c %d\n", 'a' + i, cnt[i]);
}
return 0;
}