C++ファーウェイ筆記試験問題:エラーコードが存在するファイル名と行番号を記録できる簡単なエラー記録機能モジュールを開発した.


リンク:https://www.nowcoder.com/questionTerminal/67df1d7889cf4c529576383c2e647c48
出典:牛客網
この問題にはいくつかの文字列の検索/検索位置/substr切り取りサブ列/compareの定義、vector>定義、および使用方法、getline入力/make_pairなどの方法.
メモして、忘れないように!
エラーコードが存在するファイル名と行番号を記録できる簡単なエラー記録機能モジュールを開発します.
処理:
1.最大8件のエラー記録を記録し、同じエラー記録(つまりファイル名と行番号が完全に一致する)に対して1件だけ記録し、エラーカウントが増加する.(ファイルが存在するディレクトリが異なり、ファイル名と行番号が同じでもマージされます)
2.16文字を超えるファイル名は、ファイルの最後に有効な16文字のみを記録する.(ファイル名が異なる場合、ファイル名の後ろの16文字と行番号だけが同じ場合は、マージしないでください)
3.入力したファイルにパスがある可能性があり、記録ファイル名にパスがない
説明を入力:
        。           ,  ,     。

         windows  

     :E:\V1R2\product\fpgadrive.c 1325

出力の説明:
              ,  :         ,      , : fpgadrive.c 1325 1 

                ,        ,             。

        8   ,     8   .

              16   ,     16   

例1
入力
E:\V1R2\product\fpgadrive.c 1325

しゅつりょく
fpgadrive.c 1325 1


#include 
#include 
#include 
#include 
using namespace std;


//   
bool compare(pair a, pair b){
    return a.second > b.second;
}
int main(void){
    string input, file;
    vector> 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; i16)
            errors[idx].first.erase(0, t - 16);
        cout << errors[idx].first << ' ' << errors[idx].second << endl;
        idx++;
    }
}