15级卓工班选拔-最早的时间(字典序比较,STL运用)

题目描述

给你一些时间,输出其中最早的时间。 格式为2016-08-03 22:30:24(均为英文字符,中间一个空格,除了年份4位以外均为2位,不足会补前导0)

输入

第一行,一个整数N(表示下面将有N行,数据保证N小于等于10000)。
之后有N行每行一个时间(数据保证范围为0000-00-00 00:00:00 到9999-12-31 23:59:59)。

输出

输出只有一行,即最早的时间(格式保持不变)。

样例输入

10
3696-05-10 12:56:13
5522-10-17 00:32:36
4289-05-13 04:04:54
2552-10-08 19:18:15
4911-06-20 15:56:34
0552-10-07 22:03:09
8093-05-13 12:21:03
3944-03-17 19:47:14
8925-07-09 19:03:30
9736-07-03 18:46:48

样例输出

0552-10-07 22:03:09

分析:我们可以将每个字符串中的时间分解为多个子字符串,优先对较前的字符串进行字典序比较。存储时间最早的字符串,所有字符串比较完后输出最小的字符串即可。

其中用到了两个很方便的库函数     c=str.substr(a,b)用法:将从字符a开始复制b个字符赋值给字符串c

c=str1.compare(str2) 当str1==str2,c=0; 当str1>str2.c>0;当str1<str2,c<0;

#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int n,i,j,k;
string a1,a2,d1,d2,d3,d4,d5,d6,t1,t2,t3,t4,t5,t6;
int main()
{
	scanf("%d",&n);
	t1="9999",t2="99",t3="99",t4="99",t5="99",t6="99";//默认暂存字符串为最大值
	for(i=1;i<=n;i++)
	{
		cin>>a1>>a2;//输入每个字符串
		d1=a1.substr(0,4);//将时间分离为子字符串
		d2=a1.substr(5,2);
		d3=a1.substr(8,2);
		d4=a2.substr(0,2);
		d5=a2.substr(3,2);
		d6=a2.substr(6,2);
		if(d1.compare(t1)<0||(d1.compare(t1)==0&&d2.compare(t2)<0)||(d1.compare(t1)==0&&d2.compare(t2)==0&&d3.compare(t3)<0)||(d1.compare(t1)==0&&d2.compare(t2)==0&&d3.compare(t3)==0&&d4.compare(t4)<0)||(d1.compare(t1)==0&&d2.compare(t2)==0&&d3.compare(t3)==0&&d4.compare(t4)==0&&d5.compare(t5)<0)||(d1.compare(t1)==0&&d2.compare(t2)==0&&d3.compare(t3)==0&&d4.compare(t4)==0&&d5.compare(t5)==0&&d6.compare(t6)<0))
		{      //进行字典序比较
			t1=d1,t2=d2,t3=d3,t4=d4,t5=d5,t6=d6;//如果该时间较早于之前时间,更新
		}
	}
	cout<<t1<<'-'<<t2<<'-'<<t3<<' '<<t4<<':'<<t5<<':'<<t6;//输出最终最早的时间
}

猜你喜欢

转载自blog.csdn.net/basketball616/article/details/86643504