#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]); } } }
楼上结构体写错了,很明显题目中只有单词没有分数,只是按照单词的字典序进行排序。
最简单的方法是使用string数组,再使用快排。这是c++的特性。
你出现格式错误的原因在于输出的时候最后一个单词是需要换行的,所以不用判断是不是最后一个单词。
此外,如果输入数据字符串的末尾有空格比如:
aa aaa
aaa后面有几个空格,你会发现你的程序会在第一行会多输出一个换行。用一个struct来排序
cmp函数这样写