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を返却