【信息学奥赛一本通·编程启蒙 C++题解】 3435:练75.3 日期排序

信息学奥赛一本通-编程启蒙(C++版)在线评测系统
3435:练75.3 日期排序

解题思路

  1. 数据存储:定义一个结构体来存储日期的年、月、日信息。从输入中解析出每个日期的年、月、日,并存储在结构体中。
  2. 自定义比较函数:为了对日期进行排序,需要定义一个比较函数。比较函数先比较年份,如果年份相同则比较月份,若月份也相同则比较日期。
  3. 排序:使用C++标准库中的sort函数,结合自定义的比较函数对日期结构体数组进行排序。
  4. 输出:遍历排序后的日期结构体数组,按照“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;
}

代码解释

  1. 结构体Date:用于存储日期的年、月、日信息。
  2. 比较函数compare:定义了日期的比较规则,先比较年份,年份小的日期靠前;年份相同则比较月份,月份小的靠前;月份也相同则比较日期,日期小的靠前。
  3. 主函数main
    • 读取日期数量n
    • 创建一个vector存储Date结构体。
    • 循环读取每个日期字符串,解析并存储到vector中。
    • 使用sort函数结合自定义比较函数对日期进行排序。
    • 循环输出排序后的日期。

代码测试

测试 1: 正常数据
测试 2:边界值 - 最小日期数量
测试 3:边界值 - 最大日期数量
测试 4:相同年份和月份
测试 5:相同年份

知识总结

  1. 结构体的使用:结构体是一种自定义数据类型,允许将不同类型的数据组合在一起。在本题中,通过结构体Date方便地存储和管理日期的年、月、日信息。
  2. 自定义比较函数:在C++中,sort函数可以对各种容器进行排序。通过自定义比较函数,可以定义特定的数据排序规则。这在处理复杂数据类型(如日期)的排序时非常有用。
  3. 字符串处理stringstreamgetline函数用于字符串的分割和解析,stoi函数用于将字符串转换为整数。同时,通过stringstream也可以实现将整数转换为格式化的字符串,用于输出。这些字符串处理函数在处理输入输出格式时非常重要。
  4. 边界条件考虑:在编程中,要考虑输入数据的边界条件,如最小和最大数据量。对于日期排序,还需要考虑日期各个部分相同的情况,以确保程序的正确性和健壮性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

信奥大黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值