题目
描述:
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。处理: 1、 记录最多8条错误记录,,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加;2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;3、 输入的文件可能带路径,记录文件名称不能带路径。运行时间限制:
10Sec内存限制:
128MByte输入:
一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。如:E:\V1R2\product\fpgadrive.c 1325输出:
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:fpgadrive.c 1325 1样例输入:
E:\V1R2\product\fpgadrive.c 1325样例输出:
fpgadrive.c 1325 1注意
如果记录的错误日志已经有8条了,就循环记录,意思就是新进来的一条错误日志(与之前没有重复)放在第一个位置,再新进来的一条错误日志(与之前没有重复)放在第2个位置,再新进来的一条错误日志(与之前没有重复)放在第三个位置。。。。。。。。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class ErrorRecord{
public:
ErrorRecord(const string &str1, unsigned int line_no1, int count1 = 0):str(str1), line_no(line_no1), count(count1) {}
~ErrorRecord() {}
string str;
unsigned int line_no;
int count;
};
void getStaData(vector<ErrorRecord *> &record_vec, const string &str, unsigned int line_no)
{
int i;
for (i = 0; i < record_vec.size(); i++) {
if (record_vec[i]->str.compare(str) == 0 && record_vec[i]->line_no == line_no) {
record_vec[i]->count++;
break;
}
}
if (i == record_vec.size()) {
ErrorRecord *tmp = new ErrorRecord(str, line_no, 1);
record_vec.push_back(tmp);
}
}
void sortRecord(vector<ErrorRecord *> &record_vec)
{
if (record_vec.size() <= 1)
return ;
for (int i = 1; i < record_vec.size(); i++) {
ErrorRecord *tmp = record_vec[i];
int j;
for (j = i; j >= 1; j--) {
if (tmp->count > record_vec[j - 1]->count)
record_vec[j] = record_vec[j - 1];
else
break;
}
record_vec[j] = tmp;
}
}
int main(void)
{
string str0;
unsigned int line_no;
vector<ErrorRecord *> record_vec;
while (cin >> str0 >> line_no) {
auto last_pos = str0.rfind("\\");
string file_name = str0.substr(last_pos + 1);
getStaData(record_vec, file_name, line_no);
}
sortRecord(record_vec);
int put_cnt = record_vec.size() > 8 ? 8 : record_vec.size();
for (int i = 0; i < put_cnt; i++) {
string &tmp = record_vec[i]->str;
string str = tmp;
if (tmp.size() > 16)
str = tmp.substr(tmp.size() - 16);
cout << str << " " << record_vec[i]->line_no << " " << record_vec[i]->count << endl;
}
return 0;
}