#include<stdio.h>
#include<string.h>
void main()
{ char a[100];
int zimu[26], b[26] = {0};
int i, chang, more = 0,e;
scanf_s("%d", &e);
scanf_s("%s",a,100);
for (i = 0; i < 26; i++)
{
zimu[i] = 0;
}
chang = strlen(a);
for (i = 0; i < chang; i++)
{
if (a[i] >= 'a' && a[i] <= 'z')
zimu[a[i] - 'a']++;//碰到一样的小写字母,则该字母所对应的序号加一
}
for (i = 0; i < chang; i++)
{
if (a[i] >= 'A' && a[i] <= 'Z')
zimu[a[i] - 'A']++;
}
for (i = 0; i < 26; i++)
{
if (zimu[i] > more)
more = zimu[i]; //逐个比较每个字母出现次数多少,找到最多的字母序号
}
for (i = 0; i < 26; i++)
{
if (more == zimu[i])
{
b[i] = i;
printf("%c\n", i + 'a');
break;
}
}
}
你这代码能找到出现最多的字母,但是这个字母不一定是最先出现的。因为你的字母是按照字母表顺序排放的,而不是出现顺序排放的。
代码修改如下:
#include<stdio.h>
#include<string.h>
void main()
{
char a[100];
int zimu[26];
char b[26] = {0};
int i, chang, more = 0,e;
int j,nmb = 0; //这里额外定义一个变量
char ch ; //额外定义一个字符变量
scanf_s("%d", &e); //这个e是干啥用的?
scanf_s("%s",a,100);
for (i = 0; i < 26; i++)
{
zimu[i] = 0;
}
chang = strlen(a);
for (i = 0; i < chang; i++)
{
if (a[i] >= 'A' && a[i] <= 'Z')
ch = a[i] + 32;
else
ch = a[i];
//判断ch是否已经记录
for (j=0;j<nmb;j++)
{
if(ch == b[j])
break;
}
//如果没有出现过,次数设为1
if(j==nmb)
{
b[nmb] = ch;
zimu[nmb] = 1;
nmb++;
}else
zimu[j]++;
}
for (i = 0; i < 26; i++)
{
if (zimu[i] > more)
more = zimu[i]; //逐个比较每个字母出现次数多少,找到最多的字母序号
}
for (i = 0; i < 26; i++)
{
if (more == zimu[i])
{
//b[i] = i;
printf("%c\n", b[i]);
break;
}
}
}