题解 | 日志排序
日志排序
https://www.nowcoder.com/practice/0f64518fea254c0187ccf0ea05019672
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
#include <algorithm>
#include<sstream>
#include<string>
using namespace std;
const int N = 10010;
bool compare(const string& str1, const string& str2) {
//要想排序需要先把时间读出来
//而要读出时间就可以用sstring
stringstream ss1(str1);
stringstream ss2(str2);
string sa[4];//用sstring把字符都读入字符数组里也很方便操作
string sb[4];
for (int i = 0; i < 4; i++) {
ss1 >> sa[i];
ss2 >> sb[i];
}
string day1 = sa[1] + sa[2];
string day2 = sb[1] + sb[2];
//因为day1和day2长度是一样长的,所以可以直接用字典序比大小
//由于所花时间的长度不一样,所以不能用字典序比较大小
//这是可以用sscanf来读取数据
double time1, time2;
sscanf(sa[3].c_str(), "%lf(s)", &time1);
sscanf(sb[3].c_str(), "%lf(s)", &time2);
//现在所有准备条件都做好了
if (time1 != time2) {
return time1 < time2;
}
else
return day1 < day2;
}
int main()
{
//本题你就一行行的读到时候输出也好输出
//不一定非要读到结构体中,读到数组中也很好排序
string tmp;
string str[N];
//sstring能让你像cin一样使用
int i = 0;
while (getline(cin, tmp)) {
str[i] = tmp;
i++;
}
//读完所有数据之后就要开始排序了
sort(str, str + i, compare);
//然后将数组中所存的值按序输出就行
for (int j = 0; j< i; j++) {
cout << str[j] << endl;
}
return 0;
}

