题解 | #简单错误记录#

简单错误记录

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

首先处理输入的字符串,形成只有16位以下的文件名,和行数组成字符串,利用vector形成原来的排序,映射累计出现的次数,再用两次反迭代,输出只含有最后8条记录
#include<iostream>
#include<string>
#include<vector>
#include<unordered_map>
using namespace std;

int main() {
    string str;
    unordered_map <string, int> m1;
    vector <string> v1, v2;
    int space_pos, row;
    while (cin >> str && cin >> row) {
        //提取最后一个转义符后面的字符串
        for (int i = str.length() - 1; i >= 0; --i) {
            if (str[i] == '\\') {
                space_pos = i;
                break;
            }
        }
        str = str.substr(space_pos + 1str.length() - space_pos - 1);
        //大于16则取16位
        str = str.length() > 16 ? str.substr(str.length() - 1616) : str;
        str += ' ' ;
        str += to_string(row);
        //利用vector排序,映射来计数
        if ( m1.find(str) == m1.end()) {
            m1[str] = 1;
            v1.push_back(str);
        } else
            m1[str] ++ ;
    }

    int count = 0;

//提取后8条错误记录
    for (vector<string>::reverse_iterator it = v1.rbegin(); it != v1.rend();
            it++) {
        ++count;
        v2.push_back(*it);
        //如果体积大于8
        if (count == 8 && v1.size() > 8)
            break;
    }
//在另一个vector中输出键,m1中的映射输出值
    for (vector<string>::reverse_iterator it = v2.rbegin(); it != v2.rend();
            it++) {
        cout << *it << " " << m1[*it] << endl;

    }

}

#在找工作求抱抱#
全部评论

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务