编程题——简单错误记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ccj_ok/article/details/74509897

问题描述:

开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。 

处理:
1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)
2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)

3.输入的文件可能带路径,记录文件名称不能带路径


思路:

首先将文件名称的路径去掉,然后用vector容器来存储由文件名和出现次数所组成的pair对组。

若文件名已出现在vector容器中,则直接更新该元素的出现次数;否则,将该文件名加入vector容器末尾;

最后自定义比较函数,比较用pair对组的第二个元素做比较,并采用稳定性排序(stable_sort)来将vector容器按文件出错次数排序。


代码:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef  pair<string,int> new_pair;
bool cmp(new_pair t,new_pair p){
    return t.second>p.second;
}
int main(){
    string s;
    vector<new_pair> hash;
    while(getline(cin, s)){
        int a = s.rfind('\\'), i=0;
        if (a != -1){
            s = s.substr(a+1);
        }
        int position = s.find(' ');
        if (position>16){
            s = s.substr(position-16);
        }
        int size = hash.size();
        for(i=0;i<size;i++){
            if(hash[i].first==s){
                hash[i].second++;
                break;
            }
        }
        if (i==size){
            hash.push_back(make_pair(s,1));
        }
    }
    stable_sort(hash.begin(),hash.end(),cmp);
    int size = hash.size(), i=0;
    //cout<<size<<endl;
    while(i<8 && i<size){
        cout<<hash[i].first<<' '<<hash[i].second<<endl;
        i++;
    }
    return 0;
}


展开阅读全文

没有更多推荐了,返回首页