题目描述
判断一个由a~z这26个字符组成的字符串中哪个字符出现的次数最多。
输入
第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z这26个字符组成的字符串,每组测试数据之间有一个空行,每行数据不超过1000个字符且非空。
输出
n行,每行输出对应一个输入。一行输出包括出现次数最多的字符和该字符出现的次数,中间是一个空格。
如果有多个字符出现的次数相同且最多,那么输出ASCII码最小的那一个字符。样例输入 复制
2 abbccc adfadffasdf
样例输出 复制
c 3 f 4
我的错误的代码
#include<stdio.h>
#include<string.h>
int main()
{
char z[30]="abcdefghijklmnopqrstuvwxyz";
int n;
int max=0;
int p=0;
while(scanf("%d",&n)!=EOF)
{
p=0;
int zz[30];
memset(zz,0,sizeof(zz));
char input[1005];
for(int i=0;i<n;i++)
{
scanf("%s\n",input);
for(int j=0;j<strlen(input);j++)
{
for(int k=0;k<26;k++)
{
if(input[j]==z[k])
{
zz[k]++;
}
}
}
for(int m=0;m<26;m++)
{
if(zz[m]>max)
{
max=zz[m];
p=m;
}
}
printf("%c %d\n",z[p],max);
}
}
}
经过好好cjy老师的指导的修正后的代码
#include<stdio.h>
#include<string.h>
int main()
{
char z[30]="abcdefghijklmnopqrstuvwxyz";
int n;
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
int max=0;
int p=0;
int zz[30];
memset(zz,0,sizeof(zz));
char input[1005];
scanf("%s\n",input);
for(int j=0;j<strlen(input);j++)
{
for(int k=0;k<26;k++)
{
if(input[j]==z[k])
{
zz[k]++;
}
}
}
for(int m=0;m<26;m++)
{
if(zz[m]>max)
{
max=zz[m];
p=m;
}
else
continue;
}
printf("%c %d\n",z[p],max);
}
}
}
主要改正了哪些地方呢
1.max 和p重置的地方