華為oj 簡單錯誤記錄
阿新 • • 發佈:2019-02-14
這道題不難,注意幾點,最多八條記錄的意思是超過八條,只取最後的八條,檔名稱最多16個字元只要這兩點做好了就可以了,但是比較尷尬的是,我做出一種解法,在別的平臺所有測試用例通過,在華為官方顯示格式錯誤,我無論怎麼修改都過不了,如果哪位大神看到,求指點:
1. 華為測試平臺結果顯示格式錯誤,本人找不到什麼錯誤。
#include<iostream> #include<string> #include<vector> using namespace std; struct file { string fileName; string lineNo; int count; }; void Reverse(string &inStr) { //翻轉字串 int i = 0; int j = inStr.size() - 1; char tmp = ' '; while (i < j) { tmp = inStr[i]; inStr[i] = inStr[j]; inStr[j] = tmp; i++; j--; } } void Calculate(string inStr, vector<file> &res) { int i = inStr.size()-1,j = 0; string lineNo = ""; string fileName = ""; bool flag = false; for (; i >= 0; i--) { if (inStr[i] == ' ') { i--; break; } lineNo += inStr[i]; } for (; i >= 0; i--,j++) { if (inStr[i] == '\\'||j >= 16) { break; } fileName += inStr[i]; } //翻轉字串 Reverse(fileName); Reverse(lineNo); for (i = 0; i < res.size(); i++) { if (res[i].fileName == fileName && res[i].lineNo == lineNo) { res[i].count++; flag = true; break; } } if (!flag) { file t; t.fileName = fileName; t.lineNo = lineNo; t.count = 1; res.push_back(t); } } int main() { string inStr = ""; vector<file> res; while (getline(cin, inStr)) { Calculate(inStr, res); } int i = 0; if (res.size() > 8) { i = res.size() - 8; } for (; i < res.size(); i++) { cout << res[i].fileName << " " << res[i].lineNo << " " << res[i].count << endl; } return 0; }
2.通過程式碼
#include<iostream> #include<string> #include<vector> using namespace std; struct error { string filefullname; string filename; string lineno; int count; } ; typedef error Error; int main() { vector<Error> result; Error temp; string ss; string filepath; int number = 0; bool flag=0; while (cin >> filepath >> temp.lineno) { number++; temp.count = 1; ss = filepath.substr(filepath.find_last_of("\\")+1, filepath.length()); temp.filefullname = ss; if (ss.length() > 16) { temp.filename = ss.substr(ss.length()-16); } else { temp.filename = ss; } for (vector<Error>::iterator iter = result.begin(); iter != result.end(); iter++) { if ((*iter).filefullname == temp.filefullname && (*iter).lineno == temp.lineno) { (*iter).count++; flag = 1; break; } } if (!flag) { result.push_back(temp); } flag = 0; } if (result.size() <= 8) { for (int i = 0; i < result.size(); i++) cout << result[i].filename << " " << result[i].lineno << " " << result[i].count << endl; } else { for (int i = result.size() - 8; i < result.size(); i++) cout << result[i].filename << " " << result[i].lineno << " " << result[i].count << endl; } return 0; }