解题思路
- 数据存储:定义一个结构体来存储日期的年、月、日信息。从输入中解析出每个日期的年、月、日,并存储在结构体中。
- 自定义比较函数:为了对日期进行排序,需要定义一个比较函数。比较函数先比较年份,如果年份相同则比较月份,若月份也相同则比较日期。
- 排序:使用C++标准库中的
sort
函数,结合自定义的比较函数对日期结构体数组进行排序。 - 输出:遍历排序后的日期结构体数组,按照“MM/DD/YYYY”的格式输出日期。
C++代码实现
#include <iostream>
#include <vector>
#include <algorithm>
#include <sstream>
#include <string>
using namespace std;
struct Date
{
int year;
int month;
int day;
};
bool compare(Date a, Date b)
{
if (a.year!= b.year)
{
return a.year < b.year;
}
else if (a.month!= b.month)
{
return a.month < b.month;
}
else
{
return a.day < b.day;
}
}
int main()
{
int n,y,m,d;
cin >> n;
vector<Date> dates(n);
for (int i = 0; i < n; ++i)
{
scanf("%d/%d/%d",&m,&d,&y);
dates[i].year=y;
dates[i].month=m;
dates[i].day=d;
}
sort(dates.begin(), dates.end(), compare);
for (int i = 0; i < n; ++i)
{
printf("%02d/%02d/%02d\n",dates[i].month,dates[i].day,dates[i].year);
}
return 0;
}
代码解释
- 结构体
Date
:用于存储日期的年、月、日信息。 - 比较函数
compare
:定义了日期的比较规则,先比较年份,年份小的日期靠前;年份相同则比较月份,月份小的靠前;月份也相同则比较日期,日期小的靠前。 - 主函数
main
:
- 读取日期数量
n
。 - 创建一个
vector
存储Date
结构体。 - 循环读取每个日期字符串,解析并存储到
vector
中。 - 使用
sort
函数结合自定义比较函数对日期进行排序。 - 循环输出排序后的日期。
代码测试
测试 1: 正常数据
测试 2:边界值 - 最小日期数量
测试 3:边界值 - 最大日期数量
测试 4:相同年份和月份
测试 5:相同年份
知识总结
- 结构体的使用:结构体是一种自定义数据类型,允许将不同类型的数据组合在一起。在本题中,通过结构体
Date
方便地存储和管理日期的年、月、日信息。 - 自定义比较函数:在C++中,
sort
函数可以对各种容器进行排序。通过自定义比较函数,可以定义特定的数据排序规则。这在处理复杂数据类型(如日期)的排序时非常有用。 - 字符串处理:
stringstream
和getline
函数用于字符串的分割和解析,stoi
函数用于将字符串转换为整数。同时,通过stringstream
也可以实现将整数转换为格式化的字符串,用于输出。这些字符串处理函数在处理输入输出格式时非常重要。 - 边界条件考虑:在编程中,要考虑输入数据的边界条件,如最小和最大数据量。对于日期排序,还需要考虑日期各个部分相同的情况,以确保程序的正确性和健壮性。