类似华为16年题,可参考,下为代码修改,思想不变。
#include <iostream> #include<bits/stdc++.h> #include<string> #include<algorithm> using namespace std; struct file { string name; int row; int num; }; vector<file> f; string filenameall(string s) { string temp =""; for(int i = s.size() - 1; i >= 0; i--) { if(s[i] != '\\') { temp += s[i]; } else break; } reverse(temp.begin(), temp.end()); return temp; } int isin(file x) { for(int i = 0; i < f.size(); i++) { if(x.name == f[i].name && x.row == f[i].row) return i; } return -1; } bool cmp(file a, file b) { return a.num > b.num; } int main() { string s; //freopen("1.txt", "r", stdin); while(cin >> s) { int k; file temp; scanf("%d", &k); //system("pause"); temp.name = filenameall(s); temp.row = k; int index = isin(temp); if(index != -1) { f[index].num++; //cout << f[index].name << " " << f[index].row << " " << f[index].num << endl; //system("pause"); } else { temp.num = 1; f.push_back(temp); //cout << temp.name << " " << temp.row << " " << temp.num << endl; //system("pause"); } } sort(f.begin(), f.end(), cmp); for(int i = 0; i < f.size(); i++) { //cout << f[i].name << " " << f[i].row << " " << f[i].num << endl; } for(int i = 0; i < f.size(); i++) { if(i == 8) break; string temm; if(f[i].name.size() > 16) temm = f[i].name.substr(f[i].name.size() - 16, 16); else temm = f[i].name; cout << temm << " " << f[i].row << " " << f[i].num << endl; } return 0; }