C++のいろいろなstring::find()

C++のstring::find()の多重定義されているアレコレ.
2017/11/18 追記:str.find()の返却値はsize_t型なのでキャストが必要です.
以下はキャストしなくても当時は動きましたが,保証されるものではありません.キャストしてください.

 

説明

stringとcharで別に定義されているけれど,今回はstringだけで,charは使用しなかったのでスルーします.
また使うときに調べるんじゃないかな(適当).
find()の返却値は0オリジンです.見つからなかった場合の返却値はstring::nposです.

  • find(str)
    stringの先頭からstrを探索
    先頭からなので,strが複数回出現する場合の返却値は,必ず添え字が最小の部分になります

  • find(str, begin_pos)
    stringのbegin_pos(0オリジン)以降からstrを探索
    strが複数回出現する場合の返却値は,必ず添え字がbegin_pos以降の最小の部分になります

  • find(str, begin_pos, str_length)
    stringのbegin_pos(0オリジン)以降からstrの先頭からstr_length文字分を探索
    strが複数回出現する場合の返却値は,必ず添え字がbegin_pos以降の最小の部分になります

 

ソースコード

 

  • 埋め込み
#include <iostream>
#include <string>

using namespace std;


int main()
{
    string str = "ababc";

    cout << "str.find(\"c\"): " << str.find("c") << endl;
    cout << endl;

    cout << "str.find(\"c\", 2): " << str.find("c", 3) << endl;
    cout << "str.find(\"c\", 3): " << str.find("c", 4) << endl;
    cout << endl;

    cout << "str.find(\"abc\", 0, 2): " << str.find("abc", 0, 2) << endl;
    cout << "str.find(\"abc\", 0, 3): " << str.find("abc", 0, 3) << endl;
    cout << endl;

    cout << "str.find(\"c\", 0, 0): " << str.find("c", 0, 0) << endl;
    
    return 0;
}

 

出力

# 以降は追記です

# 012345
# ababcd

str.find("c"): 4                # 'c'の添え字は4

str.find("c", 4): 4             # 4文字目以降の"cd"から"c"をfind 返却値は先頭からの添え字は4
str.find("c", 5): 4294967295    # 5文字目以降の"d"から"c"をfind 見つからないのでstring::nposを返却 \
                                  (string::nposは-1だけど,変換指定をしていないのでこんな数値になる)

str.find("abc", 0, 2): 0        # 0文字目以降の"ababcd"から"abc"の2文字分の"ab"をfind 最小の0を返却
str.find("abc", 0, 3): 2        # 0文字目以降の"ababcd"から"abc"の3文字分の"abc"をfind 最小の2を返却 \
                                  ("abc"を探すので0ではない)

str.find("c", 0, 0): 0          # "abc"の0文字分というのはない(?)ので,常にbegin_posを返却