题解 | #简单错误记录#
简单错误记录
https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb
#include <iostream> #include <string> #include <map> using namespace std; int main() { string str; int line_num; map<pair<string,int>,int> map1; vector<pair<string,int>> vec; while (cin >> str >>line_num) { // 注意 while 处理多个 case int pos=str.rfind('\\');// \\代表一个反斜杠.rfind找到其最后一次出现的位置 string str1,str2; str1.append(str,pos+1,str.size()); if(str1.size()<=16){ str2=str1; } else if(str1.size()>16){ str2.append(str1,str1.size()-16,16);//假如有17个字符,则str2从str1下标1开始向后复制16个字符 } map<pair<string,int>,int>::iterator it=map1.find(pair<string,int>(str2,line_num)); if(it!=map1.end()){//找到重复了 } else{ vec.push_back(pair<string,int>(str2,line_num)); } map1[pair<string,int>(str2,line_num)]++; if(vec.size()==9){ vec.erase(vec.begin()); } } for(auto k=vec.begin();k!=vec.end();k++){ cout<<k->first<<" "<<k->second<<" "<<map1[pair<string,int>(k->first,k->second)]<<endl; } } // 64 位输出请用 printf("%lld")