读书人

小弟我又出来了大侠帮忙看看有关问

发布时间: 2012-03-24 14:00:46 作者: rapoo

呵呵,我又出来了,大侠帮忙看看问题吧
描述
现在给你一个由小写字母组成字符串,要你找出字符串中出现次数最多的字母,如果出现次数最多字母有多个那么输出最小的那个。
输入
第一行输入一个正整数T(0<T<25)
随后T行输入一个字符串s,s长度小于1010。
输出
每组数据输出占一行,输出出现次数最多的字符;

#include <stdio.h>
#include <string.h>
int main()
{
int ncase,i,max,t,k;
char a[1010],b[26]={0};
scanf("%d",&ncase);
getchar();
while(ncase--)
{
gets(a);
k=strlen(a);
for(i=0;i<k;i++)
{
b[a[i]-97]++;

}
for(i=0,max=b[0];i<26;i++)
{
if(max<b[i])
{
max=b[i];
t=i;

}
}
printf("%c\n",t+97);




}
}



[解决办法]
#include <stdio.h>
#include <string.h>
int main()
{
int ncase,i,max,t,k;
char a[1010]="\0",b[26]="\0";
scanf("%d",&ncase);
getchar();
while(ncase--)
{
strcpy(a,"\0");
strcpy(b,"\0");
gets(a);
k=strlen(a);
for(i=0;i<k;i++)
{
b[a[i]-97]++;

}
for(i=0,max=b[0];i<26;i++)
{
if(max<b[i])
{
max=b[i];
t=i;

}
}
printf("%c\n",t+97);

}
}
[解决办法]

C/C++ code
#include <stdio.h>#include <string.h>int main(){    int ncase,i,max,t,k;    char a[1010],b[26]={0};    scanf("%d",&ncase);    getchar();    while(ncase--)    {        gets(a);        k=strlen(a);                for(i=0;i<k;i++)        {            b[a[i]-97]++;                    }        max=b[0];        t=0;        for( i--; i > 0; i--)        {            if( b[i] >= max)            {                max = b[i];                t = i;            }        }    }            printf("%c\n",t+97);    return 0;}
[解决办法]
C/C++ code
int arr[26] = {0};char SelectChar(char *src){    int max = 0;    int index = 0;        char *pt = src;    char chRet = '\0';    while(*pt != '\0')    {    index = *pt - 'a';        arr[index]++;        pt++;    }                         max = 0;    for(int i = 0; i < 26; i++)    {    if(arr[i] > max)        {             max = i;    }    }    chRet = 'a' + i;    Return chRet;   }
[解决办法]
楼主的编码有2个问题,
第一个每次循环就是while中a,b的数组都没清空,
第二个问题在求最大值的时候t都没取0,改成这样for(i=0,max=b[0],t=0;i<26;i++)。因为如果有两组,第二组全是a的话,t!=0的话,不会进if(max<b[i])里面去,t是上一次的数值。

读书人网 >C语言

热点推荐