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

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 06: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月21日
  • 已采纳回答 12月14日
  • 创建了问题 12月10日

悬赏问题

  • ¥15 vue请求不到数据,返回状态200,数据为html
  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部