啦啦啦啦啦卖报的行家 2021-11-15 22:54 采纳率: 100%
浏览 87
已结题

给定字符串,求出现次数最多的那个字母及次数,如有多个重复则输出最先出现的

#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;
        }
    }
}

  • 写回答

1条回答 默认 最新

  • 关注

    你这代码能找到出现最多的字母,但是这个字母不一定是最先出现的。因为你的字母是按照字母表顺序排放的,而不是出现顺序排放的。
    代码修改如下:

    #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;
            }
        }
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月16日
  • 已采纳回答 11月15日
  • 创建了问题 11月15日

悬赏问题

  • ¥15 ecplise在连接数据库时显示加载驱动成功但是数据库连接失败
  • ¥15 visionmaster启动失败,提示为“机器不满足授权而被禁用”
  • ¥50 用logisim设计16位单时钟周期cpu
  • ¥15 IDEA中圈复杂度如何具体设置
  • ¥50 labview采集不了数据
  • ¥15 Multisim红外倒车雷达仿真中距离问题
  • ¥15 请上面代码做什么处理或什么混淆
  • ¥15 英雄联盟自定义房间置顶
  • ¥15 W5500网线插上无反应
  • ¥15 如何用字典的Key,显示在WPF的xaml中