Humaos 2022-11-20 13:05 采纳率: 100%
浏览 1
已结题

有关字符串的一个问题,有点复杂。

输入一个长度不大于1024的字符串,统计各个小写字母出现次数,然后按字母出现次数的多少从大到小排序,如果次数相同,按字母表输出,没出现的字母不输出。
例如输入:5b3a+4-hdeh5dh?
输出为:
h 3
d 2
a 1
b 1
e 1

为什么我这个代码没有输出??是哪里错了吗。

#include<stdio.h>

int main()
{
     char s[1024],a[26],b[1024],k='a'-1;
     int i=0,j,c[26],sum=0;
     scanf("%s",s);
     for(j=0;j<26;j++)
         a[j]=(k+=1);
     for(j=0;j<1024;j++)
     {
         while(i<1024)
         {
             if(s[i]>='a'&&s[i]<='z')
                 b[j]=s[i];
            i++;
            break;
        }
    }
    for(j=0;j<26;j++)
    {
        for(i=0;i<1024;i++)
        {
            if(b[i]==a[j])
                sum++;
            else
                continue;
            c[j]=sum;
        }
        sum=0;
    }
    i=0;
    while(i<1024)
    {
        if(c[i]<c[i+1])
        {
            j=c[i];
            c[i]=c[i+1];
            c[i+1]=j;
            k=b[i];
            b[i]=b[i+1];
            b[i+1]=k;
            i++;
        }
        else if(c[i]=c[i+1]&&b[i]>b[i+1])
        {
            k=b[i];
            b[i]=b[i+1];
            b[i+1]=k;
            i++;
        }
        else
        {
            i++;
            continue;
        }
    }
    for(i=0;i<1024;i++)
    {
        printf("%c\t%d",b[i],c[i]);
        printf("\n");
    }
}
  • 写回答

2条回答 默认 最新

  • 码上就疯 2022-11-20 14:19
    关注
    
    #include<stdio.h>
    int main()
    {
        char s[1024]={'\0'},a[26],d[26],k='a'-1;
        int i=0,j,c[26]= {0},sum=0;
        scanf("%s",s);
        for(j=0; j<26; j++) {
            a[j]=(k+=1);
           
        }
        for(j=0; j<26; j++)
        {
            for(i=0; i<1024; i++)
            {
                if(s[i]==a[j])
                    sum++;
            }
            c[j]=sum;
            d[j]=a[j];
            sum=0;
        }
    
        for(j=0; j<26; j++) {
            for(i=0; i<26-1-j; i++) {
                if(c[i]<c[i+1]) {
                    sum=c[i];
                    c[i]=c[i+1];
                    c[i+1]=sum;
                    k=d[i];
                    d[i]=d[i+1];
                    d[i+1]=k;
    
                }
            }
        }
        for(i=0; i<26; i++)
        {
           if(c[i]>0) {
                printf("%c\t%d",d[i],c[i]);
                printf("\n");
           }
    
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月28日
  • 已采纳回答 11月20日
  • 修改了问题 11月20日
  • 修改了问题 11月20日
  • 展开全部

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100