簡單錯誤記錄【牛客網】
題意理解
統計同文件名,行號的錯誤記錄數量,要求迴圈只打印8個錯誤記錄
問題分析
思路是逐行讀入錯誤記錄,擷取檔名,行號,這樣就組合成一個列表,再對這個列表的元素統計個數。輸出的結果只能保留最後8個錯誤記錄。
轉1:用string庫作字串處理,有io操作getline(cin,str)讀取一行, s.find_first_of(' ')找到字串第一個空格位置, s.find_last_of(' ')找到字串最後一個空格位置, s.substr(pos, size)取字串從pos開始的size個的子串, s1 + s2拼接s1和s2字串等
轉2:檔名和行號最終都會輸出,可以拼接成一個字串(中間用一個空格)表示,統計個數用順序容器vector,容器元素型別是結構體<檔名 行號,個數>, 操作有push_back(item_type)追加到末尾, begin()和end()遍歷迭代器,size()計算容器長度,vector[]下標訪問,泛型工具為find_if(start,end, matcher)條件查詢 ,matcher是類,過載了()方法用於支援變數查詢。
轉3:輸出容器後8個錯誤記錄方法,可以用分支演算法,小於8個全輸出,大於八個用下標遍歷;巧妙的辦法是全遍歷所有記錄,記錄當前遍歷的元素下標,如果下標+8大於容器長度,說明是後8個錯誤記錄,就可以列印輸出了。
其他
字串處理沒有向java,python裡的split直接用分隔符處理,需要定位+子串的方式處理,有點麻煩,子串的第二個引數還是個長度,耽誤很多時間。就是字串處理不熟練。
統計個數就想到了map,但是map的自動排序無法違反了輸出對原有順序的要求,需要轉成vector+find_if來實現,find_if對完整元素查詢可直接通過函式引數的方式結果,但這題是對元素中的一部分查詢,所以用了類引數,過載了()方法實現。這個就很高階了。如下是連結
https://blog.csdn.net/huangyimo/article/details/72430634
問題花了一天。想想泛型的使用一直忽略了,後面補補。
連結
https://github.com/xierensong/learngit/blob/master/ncode/4/4.cpp