题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
#include <bits/stdc++.h>
using namespace std;
string extractFileName(string& s) {
size_t pos = s.find_last_of('\\');
return pos == string::npos ? s : s.substr(pos+1);
}
string shortenFileName(string s) {
return s.size() > 16 ? s.substr(s.size()-16) : s;
}
int main() {
string line;
unordered_map<string, int> errorCounts;
queue<string> q;
while(getline(cin, line)) {
istringstream iss(line);
string filePath;
string lineNumber;
iss >> filePath >> lineNumber;
string fileName = shortenFileName(extractFileName(filePath));
string errorRecord = fileName+' '+lineNumber;
errorCounts[errorRecord]++;
//cout << errorRecord <<' ' << errorCounts[errorRecord] << endl;
if(errorCounts[errorRecord] == 1) {
q.push(errorRecord);
if (q.size() > 8) {
q.pop();
}
}
}
while (!q.empty()) {
string file = q.front();
q.pop();
cout << file << " " << errorCounts[file] << endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")
1.提取文件名字
2.文件名缩短至16位
3.文件名、行号、数量存储到哈希表
4.按顺序存储文件名、行号到队列(保持size为8)
5.输出队列中文件名、行号与哈希表中的数量
