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

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

#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 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败