华为机试题——简单错误记录
2016-09-18 22:18
239 查看
题目描述
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。处理:
1、 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加;
2、 超过16个字符的文件名称,只记录文件的最后有效16个字符;
3、 输入的文件可能带路径,记录文件名称不能带路径。
输入描述:
一行或多行字符串。每行包括带路径文件名称,行号,以空格隔开。
输出描述:
将所有的记录统计并将结果输出,格式:文件名 代码行数 数目,一个空格隔开,如:
输入例子:
E:\V1R2\product\fpgadrive.c 1325
输出例子:
fpgadrive.c 1325 1
代码如下:
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; bool compare(pair<string, int> a, pair<string, int> b){ return a.second > b.second; } int main(void){ string input, file; vector<pair<string, int>> errors; while (getline(cin, input)){ if (input.size() == 0) break; unsigned int f = input.rfind('\\'); file = input.substr(f + 1); errors.push_back(make_pair(file, 1)); for (int i = 0; i<(errors.size() - 1); i++){ if (errors[i].first == file){ errors[i].second++; errors.pop_back(); break; } } } stable_sort(errors.begin(), errors.end(), compare); int idx = 0; while (idx<8 && idx<errors.size()){ string check = errors[idx].first; int t = check.find(' '); if (t>16) errors[idx].first.erase(0, t - 16); cout << errors[idx].first << ' ' << errors[idx].second << endl; idx++; } }//通过所有测试用例:
#include <iostream> #include <string> #include <vector> #include <sstream> #include <algorithm> using namespace std; string getFileName(string path){ int pos = path.rfind('\\'); return path.substr(pos + 1); } string modifyName(string name){ if (name.size() > 16){ name = name.substr(name.size() - 16); } return name; } struct ErrRecord{ string file; int lineNo; int count; ErrRecord(string file, int lineNo){ this->file = file; this->lineNo = lineNo; count = 1; } bool operator==(const ErrRecord & a){ return (file == a.file) && (lineNo == a.lineNo); } }; int main(){ string file; int lineNo; vector<ErrRecord> myvec; while (cin >> file >> lineNo){ ErrRecord record(getFileName(file), lineNo); auto res = find(myvec.begin(), myvec.end(), record); if (res == myvec.end()){ myvec.push_back(record); } else{ res->count++; } } int count = 0; for (auto item : myvec){ if (count + 8 >= myvec.size()){ cout << modifyName(item.file) << " " << item.lineNo << " " << item.count << endl; } count++; } return 0; }
相关文章推荐
- 华为机试题2016(一) 简单错误记录
- 华为机试题2016(一) 简单错误记录
- [华为机试题]简单错误记录
- [华为机试题]简单错误记录
- 华为2016校园招聘上机笔试题----简单错误记录
- 【华为OJ】简单错误记录
- [华为面试题]简单错误记录
- 华为OJ 简单错误记录 (错误,不知道为什么,求大神指教)
- 华为2016校园招聘题----[编程题]简单错误记录(JAVA版)
- 简单错误记录(华为2016校招)
- [华为机试]简单错误记录
- 华为2016校园招聘上机笔试题2:简单错误记录(并前面错误发现修改1)
- 华为16年机试(二):简单错误记录
- 【华为OJ】【069-简单错误记录】
- [华为机试练习题]36.简单错误记录
- 华为机试-简单错误记录
- 【华为OJ】简单错误记录【未完成】
- 华为OJ-------简单错误记录
- 华为机试-简单错误记录
- 华为-简单错误记录-Java