c++

思路描述

  1. 首先对数据进行除了,对输入的字符串进行分割,对于分割的第一个字符找到最后一个斜杆的位置,再进行分割,第二个字符转换成整数。用两个数组进行存储
  2. 识别相同的错误,相同的错误是文件名相同和行号相同,则定义一个pair<string,int>PII进行标识 再通过map对相同错误的个数进行存储
  3. 再开辟两个数组,将不同的错误按照出现先后存储起来,最后取出倒八个错误

具体代码实现如下

using namespace std;
typedef pair<string,int>PII;
int main(){
    string s;
    vector<int>v,v1;
    vector<string>vs,vs1;
    map<PII,int>m;
    while(getline(cin,s)){
        istringstream iss(s);
        int cnt=0;
        string seg;
        while(getline(iss,seg,' ')){
            if(cnt==0){//第一个字符串截取斜杆后的字符
               int lastindex=seg.find_last_of('\\');
                string ss=seg.substr(lastindex+1,seg.size()-1-lastindex);
                cnt++;
                if(ss.size()<=16)vs.push_back(ss);
                else vs.push_back(ss.substr(ss.size()-16,16));
            }else{//第二个字符串转换成整数
                v.push_back(stoi(seg));
            }
        }
    }
    for(int i=0;i<v.size();i++){
        //如果没有存过
        PII p={vs[i],v[i]};
        if(m[p]==0){
            vs1.push_back(vs[i]);
            v1.push_back(v[i]);
            m[p]++;
        }else{
            m[p]++;
        }
    }
    if(vs1.size()<=8){
        for(int i=0;i<vs1.size();i++){
             PII p={vs1[i],v1[i]};
            cout<<vs1[i]<<" "<<v1[i]<<" "<<m[p]<<endl;
        }
    }else{
        for(int i=vs1.size()-8;i<vs1.size();i++){
             PII p={vs1[i],v1[i]};
            cout<<vs1[i]<<" "<<v1[i]<<" "<<m[p]<<endl;
        }
    }
    return 0;
}