std::string 内を検索する - C++ プログラミング

PROGRAM


std::string 内を検索する

C++ の std::string には、格納している文字列の中から指定したサブ文字列が登場する位置を検索できる find 系列の関数が用意されています。

この find 系列の関数には、具体的には次の 6 つの関数があります。

find 指定した文字列が最初に現れる位置を取得します。
rfind 指定した文字列が最後に現れる位置を取得します。
find_first_of 指定した文字セットのどれかが現れる最初の位置を取得します。
find_last_of 指定した文字セットのどれかが現れる最後の位置を取得します。
find_first_not_of 指定した文字セット以外の文字が現れる最初の位置を取得します。
find_last_not_of 指定した文字セット以外の文字が現れる最後の位置を取得します。

これらを使用することで、指定した文字列が登場する位置を find や rfind 関数を使って検索したり、指定した文字セットのどれかが現れる位置を find_first_of 関数や find_last_of 関数などを使って検索することができます。

これよりもっと高度な検索を行いたい場合は、C++11 の 正規表現 を使う必要があります。

 

指定した文字列が見つかったかは、戻り値で判断します。

取る引数と戻り値はどれも同じで、例えば find 関数を例にすると次の 4 通りになっています。

size_type find(const basic_string& str, size_type pos = 0) const str で指定した文字列が現れる位置を取得します。pos では何番目の文字から検索を開始するかを指定できます。
size_type find(const CharT* s, size_type pos, size_type count) const str で指定したうちの先頭から count 個の文字列が現れる位置を取得します。pos では何番目の文字から検索を開始するかを指定します。
size_type find(const CharT* s, size_type pos = 0) const str で指定した文字列が現れる位置を取得します。pos では何番目の文字から検索を開始するかを指定できます。
size_type find(CharT ch, size_type pos = 0) const; ch で指定した文字が現れる位置を取得します。pos では何番目の文字から検索を開始するかを指定できます。

いずれの場合も、指定したものが見つかった場合は先頭を 0 とした位置を返し、見つからなかった場合は std::string::nops を返します。

 

引数で指定できる文字の位置 pos は、先頭を 0 とした通し番号になります。

これを指定することで、find 関数や find_first 系の関数であれば pos から最後までを、rfind 関数や find_last 系の関数であれば pos から先頭までを順に検索することになります。

このとき気を付けておきたいのが、pos はあくまでも検索する位置を示しているというところです。

s や str を使って検索文字列を指定した場合は、検索する位置から続く文字列がそれと一致するかを調べるため、rfind 関数の場合は pos で指定した右端を筆頭にしてさらに右側の文字列も検索対象となります。

 

また、count で指定する文字数は、検索文字列 s のうちの先頭から何文字を比較対象とするかを意味します。

例えばここに 2 が指定されていたとすると、検索文字列として 3 文字以上が指定されていたとしても、そのうちの先頭 2 文字を使って検索処理が行われます。


[ もどる ]