c++ sort cmp规则 题:日期排序


题目 1227: 日期排序

原题传送门

时间限制: 1Sec 内存限制: 128MB 提交: 984 解决: 346

题目描述
有一些日期,日期格式为“MM/DD/YYYY”。编程将其按日期大小排列。

输入

输出

样例输入

15/12/1999
10/21/2003
10/22/2003
02/12/2004
11/30/2005
12/31/2005

样例输出

15/12/1999
10/21/2003
10/22/2003
02/12/2004
11/30/2005
12/31/2005

题解:

这道题本身很简单 你可以像我一开始一样用for循环去写

就像这样:


	int i,j;
	for(i=0;i<len-1;i++)
		for(j=0;j<len-1-i;j++){
			if(d[j].year>d[j+1].year)
				swap(d[j],d[j+1]);
			else if(d[j].year==d[j+1].year){
				if(d[j].month>d[j+1].month)
					swap(d[j],d[j+1]);
				else if(d[j].month==d[j+1].month)
					if(d[j].day>d[j+1].day)
						swap(d[j],d[j+1]);
			}
		} 

/*
void swap(date d1,date d2){
	date d3;
	d3=d2;
	d2=d1;
	d1=d3;
}

*/

但是,C++中STL本身已经提供了性能很好(我们自己编写的算法很难超过他的效率)的sort函数,所以我们只需要去编写对应的小于(cmp)规则即可。
同时注意到输出中是有不足补0的情况的,还需要了解一下cout控制输出的规则。

02/12/2004

代码实现

#include <iostream> 
#include <algorithm>
#include<iomanip>
using namespace std;

typedef struct date{
	int month;
	int day;
	int year;
} date;

date d[1001];
int len;

bool cmp(date d1,date d2){
	if(d1.year!=d2.year)
		return d1.year < d2.year;
	else if(d1.month!=d2.month)
		return d1.month < d2.month;
	else if(d1.day!=d2.day)
		return d1.day < d2.day;
}

int main(){

	date td;
	//接受输入 
	int len=0,i;
	char c;
	while(cin>>d[len].month>>c>>d[len].day>>c>>d[len].year)
		len++;

	sort(d,d+len,cmp);
	for(i=0;i<len;i++)
		cout<<setw(2)<<setfill('0')<<d[i].month<<'/'<<setw(2)<<setfill('0')<<d[i].day<<'/'<<d[i].year<<endl;
}


cout输出控制

在这里插入图片描述
使用控制符时,要在程序的头上加头文件iomanip.h。

主题推荐:

猜你喜欢

转载自blog.csdn.net/weixin_45761327/article/details/107531464