问题描述
题目:
安全局搜索到了一批(n个)身份证号码,希望按出生日期对它们进行从大到小排序,如果有相同日期,则按身份证号码大小进行排序。身份证号码为18位的数字组成,出生日期为第7到第14位。
输入:
第一行一个整数n,表示有n个身份证号码
余下的n行,每行一个身份证号码。
输出:
按出生日期从大到小排序后的身份证号,每行一条。
样例:
输入:
5
466272307503271156
215856472207097978
234804580401078365
404475727700034980
710351408803093165
输出:
404475727700034980
234804580401078365
215856472207097978
710351408803093165
466272307503271156
本题解法:
本题是利用字符串substr函数截取指定内容的字符串进行比较。
比较部分采用C++库函数sort排序,由于本题对于比较有特殊
要求(当出生日期相同时比较整体括号)所以自定义比较函数
填入sort当作函数比较器,代码如下:
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int Com(string a,string b)
{
string x = a.substr(6,8);
string y = b.substr(6,8);
if (x == y)
return a > b;
else
return x > y;
return 0;
}
int main(){
int n;
cin >> n;
string str[n];
for(int i = 0;i < n;i++)
{
cin >> str[i];
}
sort(str,str+n,Com);
for(int j = 0;j < n;j++)
{
cout << str[j] << endl;
}
}