解题思路:
大致思路:一看题日期排序,有年月日那么多变量,必然要使用结构体数组来进行排序啊,加上标准库里面的sort函数,不是轻松AC吗?但是还是有一些细节问题的,不要在细节上犯错误。下面我来详细的写一下结构体数组和sort里面的cmp函数。
结构体:一组数据往往具有不同的数据类型,数组无法存放,这时需要用到结构体,结构体是一种构造数据类型,是由若干个"成员"组成的,每一个成员可以是一个基本数据类型或是一个构造类型。使用用来存储多种类型最合适不过了!下面就是一个最简单的结构体变量。对结构体变量赋值是通过点号(.)来进行的,也可以通过等号(=)。
结构体数组:一个结构体变量可以存放一组数据,如果多组数据需要进行运算,应该应用数组,这就是结构体数组。数组的元素也可以是结构类型的。结构数组的每一个元素不再是简单的标准类型,而是具有相同结构类型的下标结构变量,每个元素都是一个结构类型是数据,它们都包括各个成员。下面就是一个结构体数组。
sort函数cmp实现:都知道标准库里面有个sort函数,它可以对结构体进行排序,其核心就是cmp函数。需要根据题目逻辑来写,函数返回类型是bool类型的。先讲一下这个怎么写,先写一个成绩+学号的排序吧。
就是那么的简单!!!言归正传,这个题的cmp逻辑是先判断年,再判断月,最后判断日;如果年不相同,直接返回年的比较即可;相同的话就比较月,如果月也相同就返回日的比较。
注意事项:
1、当使用while循环不断输入数据时,不能直接在循环使用自增运算符(++),要在循环里面再自增。(我就是因为这个才错的)
2、sort函数里面的cmp函数逻辑要写好,我看大部分的题解都会有警告,因为可能没有返回值,老老实实使用嵌套if语句写才最好
3、输出日期时,可能会有前导零,加上月和日最多有两位数字,使用使用%02d来控制输出结果;0是标识,补充前导零,2是宽度,输出2位数字。想看详细的链接在这:https://www.runoob.com/cprogramming/c-function-printf.html
参考代码:
#include <iostream> using namespace std; struct date//日期结构体数组 { int year; int month; int day; }a[100]; bool cmp(date x,date y) { if(x.year != y.year)//如果年份不一样,直接返回年份的比较 return x.year < y.year; else { if(x.month != y.month)//如果年份相同,在判断月,如果还相同,就判断日 return x.month < y.month; else return x.day < y.day; } } int main() { int k = 0; while(~scanf("%d/%d/%d",&a[k].month,&a[k].day,&a[k].year))//取反判断是否到文件末尾,或者这样写 while(cin >> a[k].month >> a[k].day >> a[k].year;) k++; sort(a,a + k,cmp);//结构体排序 for(int i = 0;i < k;i++) printf("%02d/%02d/%d\n",a[i].month,a[i].day,a[i].year);//0是标识,可以补充前导零;2是宽度,表示最少位数 return 0; }
0.0分
8 人评分
C语言程序设计教程(第三版)课后习题6.9 (C语言代码)浏览:603 |
用筛法求之N内的素数。 (C语言代码)浏览:1385 |
简单的a+b (C语言代码)浏览:752 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:645 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:561 |
数组与指针的问题浏览:760 |
C语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:644 |
链表数据求和操作 (C语言代码)浏览:1035 |
C二级辅导-统计字符 (C语言代码)浏览:695 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:691 |