题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
#include <iostream>
using namespace std;
#include <unordered_map>
#include <deque>
int main() {
unordered_map<string, int>dic;
deque<string>dq;
string s;
while (getline(cin, s)) {
// 截取代码行数和文件名作为字典的key 文件名限制16位
int n = s.size(), cnt = 1, i = n - 1;
for (; i >= 0 && cnt <= 16 ; i--) {
if (s[i] == '\\') {
break;
}
if (!isalpha(s[i])) {
continue;
} else {
cnt++;
}
}
//出循环i要么遇到'\'要么在第16位字符上溢出了
s = s.substr(i + 1); //s中存储着截取代码行数和文件名
if(!dic.count(s)){
dq.push_back(s);
}
dic[s]++;
}
int sz = dq.size();
deque<string>::iterator it = dq.begin();
if(sz > 8){
it = dq.begin() + sz - 8;
}
for(; it != dq.end(); it++){
cout<<*it<<' '<<dic[*it]<<endl;
}
}
// 64 位输出请用 printf("%lld")
// 对输入的字符串做如下操作
// 截取代码行数和文件名作为字典的key 文件名限制16位
// 将文件名和代码行数作为字符串加入字典
// 不在字典中再加入队列
