7-2 找出一个字符串中出现次数最多的一个字符
7-2 找出一个字符串中出现次数最多的一个字符
题目
找出一个字符串中出现次数最多的一个字符。
输入格式:
给出一个字符串,字符串的长度不大于10^6
,不区分大小写, 字符串中可能包含'A'-'Z','a'-'z',' '
字符。
输出格式:
分别输出出现最多次数的字符(如果为字母,输出小写字母),出现的次数,用一个空格分隔,如果有字符出现次数相同的输出较小的字符。行末尾无多余空格和换行
输入样例:
abcdefghijklmnopqrstuvwxyzA
输出样例:
a 2
代码
思路
- 输入一个字符串,注意此字符串可能包含空字符,则用
scanf("%[^\n]", s, N)
输入字符串 - 统计每个字符出现的次数,注意不区分大小写,则定义一个长度为27的数组
int count[27]={0}
来存储次数,count[0]~count[25]
用来存储'a~z'
和'A~Z'
(不区分大小写),count[26]
存储' '
。 - 因为'A~Z' 与 'a~z'分别对应的整数值是 65~90 和 97~122,所以定义一个整数
int w=97
,定义一个字符作为出现次数最多的字符m,且char m=w+i
(i为数组count下标),则w+i为'a~z'对应的整数值。 - 定义一个整数用来存储出现次数最多的字符的出现次数,并先令它
int max = count[0]
。 - 比较并输出出现次数最多的字符和次数。
第一次尝试
#include<stdio.h>.
#define N 1001
int main()
{
char s[N] = "";
scanf("%[^\n]", s, N);//字符串中可能包含'A'-'Z','a'-'z',' '字符
int count[27] = { 0 };//0-26=a-z,27= 。
/*
在 ASCII 码中,A~Z 与 a~z 分别对应的整数值是 65~90 和 97~122。
例如:
'A' 的整数值是 65,'Z' 的整数值是 90,
'a' 的整数值是 97,'z' 的整数值是 122。
*/
for (int i = 0; s[i] != '\0'; i++)
{
if (s[i] == ' ')
{
count[26]++;
continue;
}
int a = s[i];
int t = 0;
for (int j = 65; j < 91; j++)
{
if (a == j || a == j + 32)
{
count[t]++;
continue;
}
t++;
}
}
int w = 97;
char m=w+0;//出现次数最多字符
int max = count[0];//出现次数最多字符的出现次数
for (int i = 1; i < 27; i++)
{
if (max < count[i])
{
max = count[i];
m = w + i;
}
else if (max == count[i])
{
if (m > w + i)
{
m = w + i;
}
}
}
if (m - w == 26)
printf(" %d", count[26]);
else
printf("%c %d", m, count[m - w]);
return 0;
}
运行结果