题解 | #简单错误记录#

简单错误记录

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")

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务