1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. using namespace std;
  5. const int maxn = 100000 + 10;
  6. struct Num{ //一个身份证号码包括
  7. char front[6]; //前面部分
  8. char birthday[8]; //生日部分
  9. char after[4]; //后面部分
  10. }n[maxn];
  11. int stingToint(char* s,int len){ //将字符串转为数字以供比较
  12. int x = 0;
  13. for(int i=0;i<len;i++){
  14. x = x*10+(s[i]-'0');
  15. }
  16. return x;
  17. }
  18. bool cmp(Num a,Num b){ //自定义结构体排序函数
  19. int a_birth,b_birth,a_front,b_front,a_after,b_after;
  20. a_birth = b_birth = a_front = b_front = a_after = b_after = 0;
  21. a_birth = stingToint(a.birthday,8);
  22. b_birth = stingToint(b.birthday,8);
  23. if(a_birth == b_birth){ //如果生日一致,根据身份证号码大小排序
  24. a_front = stingToint(a.front,6);
  25. b_front = stingToint(b.front,6);
  26. if(a_front == b_front){ //如果前半部分还一致,需比较一下后面部分
  27. a_after = stingToint(a.after,4);
  28. b_after = stingToint(b.after,4);
  29. return a_after > b_after;
  30. }else{
  31. return a_front > b_front;
  32. }
  33. }else{
  34. return a_birth > b_birth;
  35. }
  36. }
  37. int cnt = 0;
  38. int main(){
  39. int m;
  40. scanf("%d",&m);
  41. string id;
  42. while(m--){
  43. cin>>id; //将输入字符串拆分为3部分
  44. for(int j=0;j<6;j++){
  45. n[cnt].front[j] = id[j];
  46. }
  47. for(int j=6;j<14;j++){
  48. n[cnt].birthday[j-6] = id[j];
  49. }
  50. for(int j=14;j<18;j++){
  51. n[cnt].after[j-14] = id[j];
  52. }
  53. cnt++;
  54. }
  55. sort(n,n+cnt,cmp); //结构体排序
  56. for(int i=0;i<cnt;i++){ // 将三部分输出
  57. for(int j=0;j<6;j++){
  58. printf("%c",n[i].front[j]);
  59. }
  60. for(int j=0;j<8;j++){
  61. printf("%c",n[i].birthday[j]);
  62. }
  63. for(int j=0;j<4;j++){
  64. printf("%c",n[i].after[j]);
  65. }
  66. printf("\n");
  67. }
  68. return 0;
  69. }
点赞(0)
 

7.3 分

3 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 2 条评论

JakeLin 4年前 回复TA
@艸泥马 不是很清楚诶,再仔细检查一下?
艸泥马 4年前 回复TA
大佬,为什么自己写会运行错误