题目描述
小李在准备明天的广交会,明天有来自世界各国的客房跟他们谈生意,小李要尽快的整理出名单给经理,你能帮他把客户来自的国家按英文字典次序排好吗?例如小李手上有来自加拿大,美国,中国的名单,排好的名单应是美国,加拿大,中国。
输入描述:
第一行为一个n(n<=100)表示n个国家,第2行到第n+1行分别为n个国家的名字。
输出描述:
输出n个国家按字典顺序的排列。
示例
输入
3
China
Canada
America
输出
America
Canada
China
思路
法1
-
输入多组字符串数组 = 定义其为二维数组。
-
对字符串进行排序,主要是对数组中对应下标的比较。
-
利用双层循环,外层表示0到n-1个字符串,内层是字符串下标进行逐一比较,共0-n-2次,因为自己不用和自己比,所以不是n-1。
法2
-
定义一个字符串数组,将字符串存进字符串数组中。
-
对字符串进行sort排序。
-
输出排序后的字符串数组。
具体实现
法1
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
char a[100][100],b[100][100];
for(int i=0; i<n; i++)
cin>>a[i]; //输入字符串
for(int i=0; i<n; i++){ //0到n-1个字符串进行比较
for(int j=0; j<n-1; j++){ //字符串下标进行逐一比较,比较0~n-2次,因为自己不用和自己比,所以不是0~n-1
if(strcmp(a[j],a[j+1])>0){ //比较两字符串大小
strcpy(b[0],a[j]);
strcpy(a[j],a[j+1]);
strcpy(a[j+1],b[0]);
}
}
}
for(int i=0; i<n; i++)
cout<<a[i]<<endl;
return 0;
}
法2
#include<bits/stdc++.h>
using namespace std;
bool cmp(string a, string b){
return a<b;
}
int main(){
int n;
string s,a[100];
cin>>n;
for(int i=0; i<n; i++){ //将字符串存进字符串数组中
cin>>s;
a[i]=s;
}
sort(a,a+n,cmp); //排序
for(int i=0; i<n; i++)
cout<<a[i]<<endl;
return 0;
}
小结
-
gets()可以读取空格,遇到换行结束。
-
strlen(s)函数用于统计字符串长度。
-
strcpy(a,b)函数用于将某个字符串复制到字符数组中,即把b的字符串内容赋值给a。
-
strcmp(a,b)函数用于比较两个字符串的大小。返回值为int类型,若a=b,返回0;若a<b,返回负数;若a>b,返回正数。
-
strcat(a,b)函数用于将两个字符串连接到一起。
对于第二种方法,谁看了不说一句:sort和cmp真香。