能不能帮我看看这个代码怎么编

img


这个代码怎么将字符转换为对应的ASC||值啊,我主要是不会转换。

实际上保存下来的就是 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;
}

如果对您有用,望采纳。