题目描述
输入6个字符串(每个字符串不超过80个字符,可能含有空格),按照字典顺序(如果包含其他字符,按照ASCII排序)对6个字符串进行排序。输出排序后的6个字符串。
输入
6个符合题目要求的字符串
输出
输出排序后的结果
样例输入 Copy
Shandong
Yantai
university
Technology
Business
Gongshang
样例输出 Copy
Business
Gongshang
Shandong
Technology
Yantai
university
题目分析
题很简单就是对带空格的字符串排序,看到题第一想法, sort排序 gets()输入;定义字符串a[][]; 不行;现在想起来了。可以用char而且char更容易理解,建议大家用char即(strcmp)具体详情看最下面补的。
因为c++sort字符串排序用string。
知道这个就简单多了。还有一点就是排序。
这一个是对字符串排序,而不能用return a < b;
因为a+b就是字符串的连接,******数字字符串是可以直接比较大小的
ac码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
string a[21];
bool cmp(string a,string b){
return a+b < b+a;//a+b就是字符串的连接,******数字字符串是可以直接比较大小的
}
int main(){
int n,i,m,j;
for(i=0;i<6;i++)
getline(cin,a[i],'\n');//对有空格string类型的字符串输入法,遇到'\n'停止输入;
sort(a,a+6,cmp);//c++中对字符串排序需要用string类型的字符串;
for(i=0;i<6;i++)
cout<<a[i]<<endl;
return 0;
}
对于做这个题的价值在于明白字符串排序用string跟字符串排序用return a+b < b+a;
说明一下
除了这种比较字符串的方法,还有一种,忘写了,临时想起来了。
就是利用strcmp()。
具体是这样的strcmp是比较char字符串的大小用的,比如现在有a[100]和b[100]两个字符串,(也就是char a[100],b[100];)再写bool比较函数之前先要理解strcmp函数的意义。strcmp(a,b);就是a,b,这两个字符串比较大小,1
,如果a>b则返回值为正数即大于零的一个数,2
,如果a<b则返回值为负数即小于零的一个数,3
,当然如果a= =b即两个字符串一致返回值则为零,(通常用这个来判断字符串是否一致)。知道这些就可以写bool比较函数了。
:就是类似这种的;
struct node{
char a[100];
}l[100];
bool cmp(node a,node b){//我试了下int cmp(node a,node b)也行
return strcmp(a.a ,b.a) < 0;
}
这样比较排序下来会好理解很多。
附上一个随便写的证明这个排序的代码吧。
#include<bits/stdc++.h>
using namespace std;
struct node{
char a[100];
}l[100];
bool cmp(node a,node b){
return strcmp(a.a ,b.a) < 0;//当然从大到小是大于零。
}
int main(){
for(int i=0;i<10;i++)
scanf("%s",l[i].a);
sort(l,l+10,cmp);
for(int i=0;i<10;i++)
cout<<l[i].a<<endl;
return 0;
}