#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; }