【问题描述】从键盘输入n个字符串,统计每个字符串中出现次数最多的英文字母,输出该字母及其出现次数,以冒号分隔。说明:字母忽略大小写,出现次数最多的字母可能有多个,若字符串中没有英文字母,则输出“no letters”。
【输入形式】第一行输入字符串个数n,第二行开始输入n行字符
【输出形式】输出n行字符串中出现次数最多的字母,若字符串中没有英文字母,则输出“no letters”
【样例说明】输入3个字符串,第一个字符串中出现次数最多的字母有2个,a和b,都出现6次;第二个字符串中不存在字母,输出no letters;第三个字符串中出现次数最多的字母是d,出现5次。
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int n = 0, i, j, max;
char buf[100];
scanf("%d\n", &n);
int **con = (int **)malloc(n * sizeof(int *));
for (i = 0; i < n; i++)
{
con[i] = (int *)calloc(26, sizeof(int));
}
for (i = 0; i < n; i++)
{
fgets(buf, 100, stdin);
for (j = 0; buf[j]; j++)
{
if (buf[j] >= 'a' && buf[j] <= 'z')
con[i][buf[j] - 'a']++;
if (buf[j] >= 'A' && buf[j] <= 'Z')
con[i][buf[j] - 'A']++;
}
}
for (i = 0; i < n; i++)
{
max = 0;
for (j = 0; j < 26; j++)
{
if (con[i][j] > max)
max = con[i][j];
}
if (max == 0)
printf("no letters\n");
else
{
for (j = 0; j < 26; j++)
{
if (con[i][j] == max)
printf("%c %d:", j + 'a', max);
}
printf("\b \n");
}
}
return 0;
}
供参考:
#include <stdio.h>
int main()
{
int n, i, flg, alp[26] = { 0 }, max = 0;
char str[101];
scanf("%d", &n);
getchar();
while (n--) {
gets(str);
i = 0; flg = 1;
while (str[i]) {
if (str[i] >= 'a' && str[i] <= 'z')
{alp[str[i] - 'a']++; flg = 0;}
else if (str[i] >= 'A' && str[i] <= 'Z')
{alp[str[i] - 'A']++; flg = 0;}
i++;
}
if (flg) {
printf("no letters\n");
}
else {
for (i = 0, max = alp[i]; i < 26; i++)
if (max < alp[i]) max = alp[i];
for (i = 0; i < 26; i++)
if (alp[i] == max)
printf("%c:%d\n", i + 'a', alp[i]);
for (i = 0; i < 26; i++)
alp[i] = 0;
}
}
return 0;
}