题解 | #简单错误记录#

简单错误记录

https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb

#include <iostream>
using namespace std;
#include <string>
#include <sstream>
#include <map>
int main()
{
    string str;
    string err;
    string num;
    multimap<string, int> errCountMap;
    string errRecord[8];
    string numRecord[8];
    int i = 0;
    while (getline(cin, str))
    {
        istringstream is1(str);
        while (getline(is1, err, '\\'))
            ;
        istringstream errIs(err);
        getline(errIs, err, ' ');
        getline(errIs, num);
        if (err.length() > 16)
        {
            err.erase(0, err.length() - 16);
        }

        if (errCountMap.count(err + num) == 0)
        {
            errRecord[i % 8] = err;
            numRecord[i % 8] = num;
            errCountMap.insert(pair<string, int>(err + num, 0));
        }
        else
        {
            errCountMap.insert(pair<string, int>(err + num, 0));
            i--;
        }
        i++;
    }

    if (i > 7)
    {
        for (int j = i % 8; j <= 7; j++)
        {
            cout << errRecord[j] << " " << numRecord[j] << " " << errCountMap.count(errRecord[j] + numRecord[j]) << endl;
        }
        for (int j = 0; j < i % 8; j++)
        {
            cout << errRecord[j] << " " << numRecord[j] << " " << errCountMap.count(errRecord[j] + numRecord[j]) << endl;
        }
    }
    else
    {
        for (int j = 0; j < i; j++)
        {
            cout << errRecord[j] << " " << numRecord[j] << " " << errCountMap.count(errRecord[j] + numRecord[j]) << endl;
        }
    }
}

感觉像是脱裤子放屁的一道题。

要注意的是,即使你存了1个新错误,其他错误的出现时间依然是有效的,所以这个所谓的只存8个就是个笑话,实际上内存还得保留之前错误的出现信息。

用好sstream提供的c++风格流,做好输入读取,注意‘\’这个特殊符号的输入要用'\\'转义输入。

再使用multimap进行计数,这个支持重复的map计数真好用,可以减少很多代码。

注意一下输出,它也是按错误时间输出的,需要在输出处进行一点修改,也可以换一种数据结构先,总之要满足先进先出,这里我大意了。

华为机试刷题记录 文章被收录于专栏

记录一下手打代码的解题思路方便复习

全部评论

相关推荐

球球别再泡了:坏,我单9要了14
点赞 评论 收藏
分享
雨夜迈巴赫:哪个厂呀
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务