#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后面有几个空格,你会发现你的程序会在第一行会多输出一个换行。
好 我试来着 确实输出有错 我在改改
可是 我为啥会多输出一行换行啊 我的b【0】确实是aa啊 怎么会多个换行 而且那个快排 我们还没学 你有啥网址是关于那个快排的吗
@打着玩: 你读入数据的方式有问题,如果输入数据最后一个是空格,那么你的b[][]数组,会多一个'\0'字符串,你就会多输出一个空字符串,也就是换行。
https://zzk.cnblogs.com 搜索快排,园子里的文章质量都很好。
#include <stdio.h> #include <string> #include <string.h> using namespace std; int main() { int d=0,e=0,f,i,j,l; char a[5001],b[101][60],c[60],s[10]={" "}; 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'; if(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) { swap(b[i],b[j]); } } } for(i=0;i<e;i++) { if(strcmp(b[i],s)!=0) { printf("%s\n",b[i]); } } }
我在输出那个地方加了一个条件就ok了 要是我还真找不出来 哈哈 总之,谢谢!
不是 在把c复制到b里的那个地方 就ok了
@打着玩: yes!
struct person
{
int score;
string name;
}
inline bool cmp(register person a,register person b)
{
if(a.score!=b.score)
return a.score>b.score;
return a.name<b.name;
}
这个结构体 后面的不咋懂 今天刚学的结构体 所以不怎么习惯用它 您这个inline bool cmp函数是什么意思?
return a.name<b.name 和 return a.score>b.score是啥意思
@打着玩: sort快排
sort(XXX,XXX,cmp)是自定义排序
cmp函数就是执行这个自定义排序的函数
return a.name<b.name 和 return a.score>b.score
前者表示按名字字典序排序,后者表示按分数排序
先比较分数,再比较名字
@JSOI爆零珂学家yzhang: inline bool cmp(register person a,register person b)
前面的inline bool 是啥意思 可以没有嘛?
或者谁有更简单的思想 可以提供一下
– 打着玩 6年前