题解 | #简单错误记录#
简单错误记录
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.输出队列中文件名、行号与哈希表中的数量