c语言ascii字符串 出现次数最多

接受一行 ascii 字符串(最大字符数为127个字符)作为输入,并输出出现次数最多的字母(但区分大小写)。如果输入中不包含字母,则显示为 none。如果有多个字符出现次数最多,输出ascii中最小的字母。
例 输入 AAaa 输出 A
输入 123 输出 none

完全找不到思路,求问应该怎么写,谢谢


int main(void)
{
    char ch, asc[52] = {0};//asc前26个大写字母,后26个小写字母
    int i, max = 0, index = -1;

    while ((ch = getchar()) != '\n')
    {
        if (ch >= 'A' && ch <= 'Z')
            asc[ch - 'A']++;

        if (ch >= 'a' && ch <= 'z')
            asc[ch - 'a' + 26]++;
    }

    for (i = 0; i < 52; i++)
    {
        if (asc[i] > max)
        {
            max = asc[i];
            index = i;
        }
    }
    if (index == -1)
        printf("none\n");
    else
        printf("%c\n", (index < 26) ? 'A' + index : 'a' + index - 26);

    return 0;
}

#include <stdio.h>

int main(void)
{
    char s[127];
    int a[127], c[127] = {0};
    int i,j,max,min,cnt=0;
    
    gets(s);
    
    for (i = 0; s[i] != '\0'; i++,cnt++){
        for (j = 0; s[j] != '\0'; j++){
            if (s[j]>='a'&&s[j]<='z' || s[j]>='A'&&s[j]<='Z'){
                a[j] = (int)s[j];
                if (c[j]==0)
                    c[j]=1;
                if (s[i] == s[j] && i!=j)
                    c[j]++;
            }
        }
    }
    max = c[0];
    min = a[0];
    for (i = 0; i < cnt; i++){
        if (c[i]>max || c[i]==max && a[i]<min){
            max = c[i];
            min = a[i];
        }
    }
    if (min>0)
        printf("%c\n",min);
    else
        printf("none\n");

    return 0;
}