东阳943 2021-12-10 10:31 采纳率: 100%
浏览 80
已结题

7-1 字符串排序 (20 分)

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:
输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:
按照以下格式输出排序后的结果:

After sorted:
每行一个字符串
输入样例:
red yellow blue black white
结尾无空行
输出样例:
After sorted:
black
blue
red
white
yellow
结尾无空行

就帮我看下我的代码问题就行,报错在sample等价和字符串长度取最大和最小的答案错误

#include<stdio.h>
#include<string.h>
int main()
{
    int m=0,k,i,j,num=0,n,p,q;
    int flag=0;
    char a[500],*t,*b[50];
    gets(a);
    i=strlen(a);
    a[i]=0;
    for(k=0;k<i;k++)
    {
        if(a[k]!=' '&&flag==0)
        {
            num++;
            flag=1;
            b[m++]=&a[k];
        }
        if(a[k]==' '){
            a[k]='\0';
            flag=0;}
    }
    n=num-1;
    for(p=0;p<num;p++)
    {
        for(q=p;q<num;q++)
        {
            if(strcmp(b[p],b[q])==1)
            {
                t=b[p];
                b[p]=b[q];
                b[q]=t;
            }
        }
    }
    printf("After sorted:\n");
    for(j=0;j<num;j++)
    {
        printf("%s",b[j]);
        if(j!=num-1)
            printf("\n");
    }
    return 0;
}


  • 写回答

2条回答 默认 最新

  • bekote 2021-12-10 14:13
    关注
    
    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int m=0,k,i,j,num=0,n,p,q;
        int flag=0;
        char a[500],*t,*b[50];
        //gets(a);
        fgets(a,500,stdin);
        i=strlen(a);
        a[i]=0;
        for(k=0;k<i;k++)
        {
            if(a[k]!=' '&&flag==0)
            {
                num++;
                flag=1;
                b[m++]=&a[k];
            }
            if(a[k]==' '){
                a[k]='\0';
                flag=0;}
        }
        n=num-1;
        for(p=0;p<num;p++)
        {
            //q=p改成q=p+1
            for(q=p+1;q<num;q++)
            {
                //==1改成>0
                if(strcmp(b[p],b[q])>0)
                {
                    t=b[p];
                    b[p]=b[q];
                    b[q]=t;
                }
            }
        }
        printf("After sorted:\n");
        for(j=0;j<num;j++)
        {
            printf("%s",b[j]);
            if(j!=num-1)
                printf("\n");
        }
        return 0;
    }
     
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 创建了问题 12月10日

悬赏问题

  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿
  • ¥15 Matlab在app上输入带有矩阵形式的初始条件发生错误
  • ¥15 CST仿真别人的模型结果仿真结果S参数完全不对
  • ¥15 误删注册表文件致win10无法开启
  • ¥15 请问在阿里云服务器中怎么利用数据库制作网站
  • ¥60 ESP32怎么烧录自启动程序
  • ¥50 html2canvas超出滚动条不显示
  • ¥15 java业务性能问题求解(sql,业务设计相关)
  • ¥15 52810 尾椎c三个a 写蓝牙地址