華為OJ:開發一個簡單錯誤記錄功能小模組,能夠記錄出錯的程式碼所在的檔名稱和行號。
阿新 • • 發佈:2019-02-13
用到了類string的length(), size(),find_first_of(),find_last_of(),substr(),push_back()函式
#include <iostream> #include <algorithm> #include <vector> #include <string> using namespace std; struct errorLog { string name; string line; int count; }; errorLog createErrorLog(string name, string line) { errorLog log; int nameSize = name.length(); int index = -1; index = name.find_last_of('\\'); name = name.substr(index + 1); log.name = name; log.line = line; log.count = 1; return log; } void recordErrorLog(int number, errorLog log, vector<errorLog> & resu) { bool isRepeat = false; for (int i = 0; i < resu.size(); i++) { if (resu[i].name == log.name && resu[i].line == log.line) { resu[i].count++; isRepeat = true; break; } } if (isRepeat == false) resu.push_back(log); } int main() { string full; string name; string line; int number = 8; vector<errorLog> result; // while (cin >> name >> line) while (getline(cin, full)) { int ind = full.find_first_of(' '); name = full.substr(0, ind); line = full.substr(ind + 1); errorLog log = createErrorLog(name, line); recordErrorLog(number, log, result); } if (result.size() >= 8) { for (int i = result.size() - 8; i < result.size(); i++) { int len = result[i].name.length(); if (len > 16) result[i].name = result[i].name.substr(len - 16); cout << result[i].name << ' ' << result[i].line << ' ' << result[i].count << endl; } } else { for (int i = 0; i < result.size(); i++) { int len = result[i].name.length(); if (len > 16) result[i].name = result[i].name.substr(len - 16); cout << result[i].name << ' ' << result[i].line << ' ' << result[i].count << endl; } } return 0; }