题目:简单错误记录
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
inline bool compare(pair<string, int> a, pair<string, int> b)
{
return a.second > b.second; // 不能用a.second >= b.second
}
int main()
{
string s;
vector<pair<string,int>> res;
while(getline(cin, s))
{
int i = s.rfind('\\'); // 从后面往回找最后一个'\'的索引
string filename = (i != string::npos)? s.substr(i+1) : s; // 如果有'\'就截取后面的字符串(文件名和行号),没有就不变(文件名前面没有目录)
int j = 0;
while(j < res.size())
{
if(res[j].first == filename)
{
res[j].second++;
break;
}
j++;
}
if(j == res.size()) res.push_back(make_pair(filename, 1)); // 向尾部添加元素
}
sort(res.begin(), res.end(), compare); // 按记录数由大到小排序
int sum = res.size() > 8? 8 : res.size();
for(int k=0; k<sum; k++)
{
string s1, s2; // 取出文件名和行号;
int i = res[k].first.find(' ');
if(i <= 16) s1 = res[k].first.substr(0, i);
else s1 = res[k].first.substr(i-16, 16); // 文件名后16个字符
s2 = res[k].first.substr(i+1); // 截取行号
cout << s1 << " " << s2 << " " << res[k].second << endl; // 文件名 行号 错误记录数
}
return 0;
}