4

私は次のコードを持っています:

std::vector<std::string> GetSameID(std::vector<string>& allFiles, int id) {
    std::vector<std::string> returnVector;
    for(std::vector<string>::iterator it = allFiles.begin(); it != allFiles.end(); ++it) {
        if(GetID(*it) == id) {
            int index = (*it).find("_CH2.raw");
            if(index > 0) {
                continue; //this works
            }
            if(0 < ((*it).find("_CH2.raw")))  {
                continue; //this doesn't
            }

            string ext =  PathFindExtension((*it).c_str());
            if(ext == ".raw") {
                returnVector.push_back(*it);
            }
        }
    }
    return returnVector;
}

私の問題は、なぜif(0 < ((*it).find("_CH2.raw")))そのように機能しないのですか? 私のファイルは ID_0_X_0_Y_128_CH1.raw ID_0_X_0_Y_128_CH2.raw という名前です (オシロスコープのチャネル 1 とチャネル 2 の ID、X と Y が異なります)。

長い道のりを行うと(インデックスを割り当ててからインデックスをチェックする)、機能しますが、読みやすいショートバージョンが機能しない理由がわかりません。

4

1 に答える 1

12

http://en.cppreference.com/w/cpp/string/basic_string/findによると、符号なしの型であるstring::find()a が返されるsize_tため、ゼロ未満になることはありません。

何かが見つからない場合は を返しますがstring::npos、これも unsigned 型ですが、int に押し込む (暗黙的に変換する) と、負の値になります。これが、最初のコード セットが機能する理由です。

于 2013-09-11T00:42:41.790 に答える