身份证号码共18位,其中第7到14位是出生日期。编写程序,输入n(n<20)个身份证号码,根据其中出生日期按年龄从大到小排序后输出。其中要求自定义函数int birthday(char s[ ]),其功能是从一个身份证信息s中生成整数的出生日期并返回。 输入格式: 先输入n,再输入n个身份证号码。 输出格式: 按年龄从大到小排序后输出身份证号码
时间: 2023-06-12 09:03:47 浏览: 825
以下是一个示例代码,实现了输入n个身份证号码,根据出生日期从大到小排序后输出身份证号码的功能:
```c++
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int birthday(char s[]) {
int year = (s[6] - '0') * 1000 + (s[7] - '0') * 100 + (s[8] - '0') * 10 + (s[9] - '0');
int month = (s[10] - '0') * 10 + (s[11] - '0');
int day = (s[12] - '0') * 10 + (s[13] - '0');
return year * 10000 + month * 100 + day;
}
bool cmp(char s1[], char s2[]) {
return birthday(s1) > birthday(s2);
}
int main() {
int n;
char id[20][19];
cin >> n;
for (int i = 0; i < n; i++) {
cin >> id[i];
}
sort(id, id+n, cmp);
for (int i = 0; i < n; i++) {
cout << id[i] << endl;
}
return 0;
}
```
在该程序中,自定义函数 `birthday` 接受一个身份证号码字符串 `s`,并将其中的出生日期转化为整数返回。函数中,我们首先将身份证号码中的年、月、日提取出来,并计算出对应的整数出生日期。具体来说,我们将身份证号码中的第7到10位解释为年份,第11到12位解释为月份,第13到14位解释为日期。注意,由于身份证号码中的年份只有后两位,需要将其转化为四位整数。最后,我们将年、月、日组合成一个整数返回。
在主函数中,我们首先读入身份证号码,然后使用 `sort` 函数将身份证号码按照出生日期从大到小排序。排序时,我们将 `cmp` 函数作为比较函数,该函数接受两个身份证号码字符串 `s1` 和 `s2`,并比较它们的出生日期大小。如果 `s1` 的出生日期较大,则返回 `true`,否则返回 `false`。最后,我们按顺序输出排好序的身份证号码即可。
阅读全文