• 解题思路

第一:按照题目的输入,应当输入两个字符串 str + num,都是string

第二: 先找出每个字符串最后的一个反斜杠字符的位置pos

第三: 取pos后的字符串为错误信息,同时判断是否长度大于16

第四: 错误信息的字符串找到后,按照题目格式开始拼接

第五: 利用vector保存每一个错误信息,保证顺序,注意打印的是后8个错误信息

第六: 利用map保存每一个错误信息的次数

  • 代码
#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;

int main() 
{
    string str, num;
    map<string,int> mp;
    vector<string> v;
    while(cin >> str >> num)
    {
        int pos = str.rfind('\\');
        if(pos != -1)
        {
            str = str.substr(pos+1);
        }
        if(str.size() > 16)
        {
            //取最后16位
            str = str.substr(str.size() - 16);
        }
        //错误信息找到,开始拼接
        str += " ";
        str += num;
        if(mp[str] == 0)
        {
            v.push_back(str);
        }
        mp[str]++;
    }
    //统计结束,开始打印
    int i = 0;
    if(v.size() > 8)
    {
        i = v.size() - 8;
    }
    for(; i < v.size(); i++)
    {
        cout << v[i] << " " << mp[v[i]] << endl;
    }
    return 0;
}
// 64 位输出请用 printf("%lld")