按英文字典顺序排序

218 阅读1分钟

题目描述

小李在准备明天的广交会,明天有来自世界各国的客房跟他们谈生意,小李要尽快的整理出名单给经理,你能帮他把客户来自的国家按英文字典次序排好吗?例如小李手上有来自加拿大,美国,中国的名单,排好的名单应是美国,加拿大,中国。

输入描述:

第一行为一个n(n<=100)表示n个国家,第2行到第n+1行分别为n个国家的名字。

输出描述:

输出n个国家按字典顺序的排列。

示例

输入
3
China
Canada
America
输出
America
Canada
China

思路

法1

  1. 输入多组字符串数组 = 定义其为二维数组。

  2. 对字符串进行排序,主要是对数组中对应下标的比较。

  3. 利用双层循环,外层表示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真香。