-->

open 1.10 单词排序 给了九分 说输出格式错误 改了好几遍 还是不行 求助

2019-01-02 21:00发布

问题:

#include <stdio.h>
#include <string.h>
int main()
{
    int d=0,e=0,f,i,j,l;
    char a[5001],b[101][60],c[60],s[10]={"123"};
    gets(a);
    l=strlen(a);
    for(i=0;i<=l;i++)
    {
        if(a[i]!=' '&&a[i]!='\0')
        {
         c[d++]=a[i];
        }
        else
        {
         if(a[i+1]!=' ')
         {
            c[d]='\0';
            strcpy(b[e++],c);
            d=0;
         }
        }
    }
      for(i=0;i<e;i++)
      {
       for(j=i+1;j<e;j++)
       {
        if(strcmp(b[i],b[j])==0)
        {
        strcpy(b[j],s);
        }
       }
      }
      for(i=0;i<e;i++)
      {
        for(j=i+1;j<e;j++)
        {
         if(strcmp(b[i],b[j])>0&&strcmp(b[i],s)!=0&&strcmp(b[j],s)!=0)
         {
          strcpy(c,b[i]);
          strcpy(b[i],b[j]);
           strcpy(b[j],c);
         }
        }
      }
      for(i=0;i<e;i++)
      {
       if(strcmp(b[i],s)!=0)
       {
       f=i;
       }
      }
    for(i=0;i<e;i++)
    {
     if(strcmp(b[i],s)!=0&&i!=f)
     {
     printf("%s\n",b[i]);
     }
     if(i==f)
     {
     printf("%s",b[i]);
     }
    }
}

 

 

回答1:

楼上结构体写错了,很明显题目中只有单词没有分数,只是按照单词的字典序进行排序。

最简单的方法是使用string数组,再使用快排。这是c++的特性。

你出现格式错误的原因在于输出的时候最后一个单词是需要换行的,所以不用判断是不是最后一个单词。

此外,如果输入数据字符串的末尾有空格比如:aa aaa aaa后面有几个空格,你会发现你的程序会在第一行会多输出一个换行。



回答2:

用一个struct来排序

struct person
{
    int score;
    string name;
}

cmp函数这样写

inline bool cmp(register person a,register person b)
{
    if(a.score!=b.score)
        return a.score>b.score;
    return a.name<b.name;
}


标签: