题目描述
给你一些时间,输出其中最早的时间。 格式为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;//输出最终最早的时间
}