题解 | #简单错误记录#

简单错误记录

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.输出队列中文件名、行号与哈希表中的数量

全部评论

相关推荐

扭转乾坤_:现在企业都是学华为,一直通过丢池子里,最后捞
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务