判断字符串中出现最多的字母及个数(代码存在问题)

#include<stdio.h>
#include<string.h>
int main()
{
char a[100];
int f[26];
int i,len,max=0;
gets(a);
for(i=0;i<26;i++)
{
f[i]=0;
}
len=strlen(a);
for(i=0;i<len;i++)
{
if(a[i]>='a'&&a[i]<='z')
{
f[a[i]-'a']++;
}
}
for(i=0;i<len;i++)
{
if(a[i]>='A'&&a[i]<='Z')//属于26个大写字母
{
f[a[i]-'A']++;//a-'A'表示用差值作为下标
}
}
for(i=0;i<26;i++)
{
if(f[i]>max)
max=f[i];
}
for(i=0;i<26;i++)
{
if(max==f[i])
{
if(a[i]>='a'&&a[i]<='z')
printf("%c %d times\n",i+'a',max);

        else if(a[i]>='A'&&a[i]<='Z')
        printf("%c %d times\n",i+'A',max);
    }
    
}
return 0;

}
//这个代码有问题,例如:在“zoo”这个单词时没有输出,该怎么改正呢?在源代码上改正一下,万分感谢指教!谢谢了

主要是个问题,就是存放字母的数组小了,因为有大小写52个字母,所以f数组要52,下面是一个修改:


#include<stdio.h>
#include<string.h>
int main()
{
    char a[100];
    int f[52];
    int i,len,max=0;
    gets(a);
    
    for(i=0;i<52;i++)
    {
        f[i]=0;
    }
    
    len=strlen(a);
    
    for(i=0;i<len;i++)
    {
        if(a[i]>='a'&&a[i]<='z')
        {
            f[a[i]-'a']++;
        }
        if(a[i]>='A'&&a[i]<='Z')//属于26个大写字母
        {
            f[a[i]-'A'+26]++;//a-'A'表示用差值作为下标
        }
    }
    

    
    for(i=0;i<52;i++)
    {
        if(f[i]>max){
            max=f[i];
            printf("max=%d,i=%d\n",max,i);
        }
            
    }
    
    for(i=0;i<52;i++)
    {
        if(max==f[i])
        {

            if(i>26){
                printf("%c %d times\n",i+'A'-26,max);    
            }else{
                printf("%c %d times\n",i+'a',max);    
            }
        
        }        
    }
    
    return 0;
}

分别用两个数组保存大写字母和小写字母的数量

#include<stdio.h>
#include<string.h>
int main() {
    char a[100];
    int f[26]={0},g[26]={0};
    int i, len, max = 0,maxi=0;
    gets(a);
    len = strlen(a);
    for(i = 0; i < len; i++) {
        if(a[i] >= 'a' && a[i] <= 'z') {
            f[a[i] - 'a']++;
        }else if(a[i] >= 'A' && a[i] <= 'Z') { //属于26个字母
            g[a[i] - 'A']++; //a-'A'表示用差值作为下标
        }
    }
    int isF=0,isG = 0;
    for(i = 0; i < 26; i++) {
        if(f[i] > max){
            max = f[i];
            maxi = i;
            isF = 1;
        }
    }
    for(i = 0; i < 26; i++) {
        if(g[i] > max){
            max = g[i];
            maxi = i;
            isG = 1;
        }
    }
    
    if(isF==1){
        printf("%c %d times\n", maxi + 'a', max);
    }else if(isG == 1){
        printf("%c %d times\n", maxi + 'A', max);
    }
    return 0;
}

最后一个for循环里如果字符串长度小于26,a[i]可能越界