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



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

哪个题目集的?