/* 抄的“汀州鹤眺”的代码,难难难 key: 1)struct思想,记录一整条记录,内部再拆分细节 2)学习myCmp的写法 3)getline的使用:读取包含空格的一整行,一般是换行符结束 亦可:cin.limits(numeric_limits<stream>::max(), "\n"); getline(cin, s); 4) 通过“istringstream”对一整行string进行按部分拆解(一般空格隔开?) n[i].all = "hs_10000_p 2007-01-17 19:22:53,315 253.035(s)" istringstream stream(n[i].all); stream >> n[i].name; stream >> n[i].start1; stream >> n[i].start2; stream >> n[i].time; */ #include <cstdio> #include <cstring> // strlen() #include <iostream> #include <istream> #include <sstream> #include <stdio.h> // gets() #include <string.h> #include <string> #include <algorithm> using namespace std; struct Node { string all; string name; string start1; string start2; double time; }; bool mySort (const Node &a, const Node &b) { if (a.time != b.time) { return a.time<b.time; } else if (a.start1 != b.start1) { return a.start1 < b.start1; } else { return (a.start2 < b.start2); } } int main() { Node n[10000]; int i = 0; while (getline(cin,n[i].all) && n[i].all.length()) { // sscanf(n[i].all, "%s%s%s%lf", n[i].name, n[i].start1, n[i].start2, n[i].time); istringstream stream(n[i].all); stream >> n[i].name; stream >> n[i].start1; stream >> n[i].start2; stream >> n[i].time; i++; } sort(n, n+i, mySort); for (int j = 0; j<i; j++) { cout << n[j].all << endl; } } // 64 位输出请用 printf("%lld")