#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]可能越界