c语言数组从键盘输入n个字符串,统计每个字符串中出现次数最多的英文字母,输出该字母及其出现次。

【问题描述】从键盘输入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;
}

img

供参考:

#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;
}