实际上保存下来的就是 ascll 值,你输出用 %d 试试你就知道了
#include <stdio.h>
int max(int * list) {
int max = 0;
for ( int i = 0 ; i < 36 ; i++ ) {
if ( list[max] < list[i] ) {
max = i;
}
}
list[max] = 0;
return (max + 'a') ;
}
int main() {
char s[100] = {0};
int list[36] = {0};
gets(s);
for ( int i = 0 ; s[i] != '\0' ; i++ ) {
if ( s[i] >= 'a' && s[i] <= 'z' ) {
list[s[i] - 'a'] ++;
} else if (s[i] >= 'A' && s[i] <= 'Z') {
list[s[i] - 'A'] ++;
} else {
}
}
/*
// 打印所有字母出现 的次数
for ( int i = 0 ; i < 36 ; i++ ) {
if ( list[i] > 0 ) {
printf( "字母 %c 有 %d 个\n", i + 'a', list[i] );
}
}
*/
// 打印最多的
printf("出现最多的字母是 %c ", max(list));
// 打印第二多的
printf("第二多的字母是 : %c \n", max(list));
// 打印第三多的
printf("第三多的字母是 : %c \n", max(list));
}
只是计算和排序统计而已,可以这样写:
#include <stdio.h>
#include <ctype.h>
void func(int *num)
{
char ch;
// 获取输入
while ((ch = getchar()) != '\n')
{
if (isalpha(ch))
{
// 大写转换
ch = tolower(ch);
// 计数,+1
(*(num + (ch - 'a')))++;
}
}
}
void max3(int *num)
{
// 输出统计,暴力法
int i = 0;
int max = 0;
int idx = -1;
for (i = 0; i < 26; i++)
{
if (num[i] > max)
{
idx = i;
max = num[i];
}
}
if (idx != -1)
{
printf("%c: %d\n", idx + 'a', max);
num[idx] = 0;//重置,防止下次查询时最大的还是它
}
}
int main()
{
// 字母只有26个,定义统计数组
int num[26] = { 0 };
printf("请输入字符串:");
func(num);
// 输出统计,暴力法
max3(num);// 第一多的
max3(num);// 第二多的
max3(num);// 第三多的
return 0;
}
如果对您有用,望采纳。