来源 | 医学部2009期末考试 |
描述 | |
统计一句话里面出现次数最多的英文字母,字母大小写无关。 | |
关于输入 | |
第一行为一个整数n,表示有n行数据。 其后每行为一个英文句子,每个句子长度不超过255个字符(包括空格,标点等非字母字符)。 | |
关于输出 | |
有n行输出。 每行为对应英文句子中出现的最多的字母(小写)。 如果有多个字母出现次数最多,则按字典顺序输出它们。 | |
例子输入 | |
1 Institue of Network Computing and Information System | |
例子输出 | |
nt | |
提示 | |
char类型可以用于存放字符,它本身其实可以理解为一个整数值(ASCII码),并且这个值在a-z中间是连续递增的,在A-Z中间也是连续递增的,但是这两个部分不是连续的。比如,'a'代表的其实是一个值,如果我们用%d去输出'a',可以试试会输出什么 所以,基于以上的思路,请不要写52个if语句来做这一题 在输入时,这个例子的1后面是有一个换行符\n的,如果想隔掉这个换行符,请使用getchar()函数或者自己加一个if判断。getchar的返回值是一个char型变量,不过如果只是想隔掉输入,直接写一个getchar()即可 如果想要输入一个字符串,请使用以下格式: char a[1000]; scanf("%s", a); 如果要求a的长度,用strlen(a)函数可以求 如果想要分别输入一个一个字符,请使用以下格式: char a; for(...) { scanf("%c", &a); } 这么做的话,请注意输入的字符是否是上一行的换行符\n |
#include<stdio.h>
#include<string.h>
int main(){
int n;
scanf("%d\n",&n);
char str[n][256];
for(int i=0;i<n;i++){
gets(str[i]);
}
int count[26];
for(int i=0;i<26;i++)count[i]=0;
for(int j=0;j<n;j++){
for(int k=0;k<strlen(str[j]);k++){
for(int t=0;t<26;t++){
if(str[j][k]=='a'+t||str[j][k]=='A'+t)
count[t]++;
}
}
}
/*for(int i=0;i<26;i++)
printf("%c%d\t",i+'a',count[i]);*/
int temp=0;
for(int i=0;i<26;i++){
// 比较出最大的count[i]并记录i
// 第一步:找出最大值
temp=maximum(temp,count[i]);
}
// 第二步:记录序号
char max[26];
for(int i=0;i<26;i++){
max[i]='\0';
}
for(int i;i<26;i++){
if(count[i]==temp)max[i]=i+'a'-'\0';
}
for(int i=0;i<26;i++)
{
printf("%c",max[i]);
}
return 0;
}
int maximum(int a,int b){
int temp;
temp=a>b?a:b;
return temp;
}