文字列の検索を行う方法【std::string|find/find_first_of/search】C++の文字列型(std::string)に対する文字列検索を行う場合には、一般的なfindメンバ関数を用いる方法のほかに、find_first_ofメンバ関数やstd::search関数を用いる方法などがあります。関数find/rfindstd::string型のメンバ関数findを用いることで、文字列の出現位置を判定することができます。findメンバ関数は検索対象の文字列が最初に出現する位置を返します。逆にrfindは最後に出現した位置を返します。(見つからなかった場合)第一引数には検索したい文字列または文字型の値を指定します。戻り値は検索文字列の出現位置のインデックスをstd::string::size_type型の値として返します。検索した値が見つからなかった場合には、戻り値としてメンバ定数std::string::nposが返されます。オプションとして、第二引数に検索開始位置を指定することもできます。引数に指定した検索文字列がC言語スタイルの文字列の場合には、第三引数に検索文字列の長さを指定することもできます。3find_first_of/find_last_offind_first_ofメンバ関数は、最初に出現する文字または文字集合を検索する機能です。第一引数の文字列の長さを指定することができます。find/rfindメンバ関数と同じです。違い文字列型の値を受け取るfind_first_of関数は文字集合による検索を行います。指定された文字列内のいずれかの文字が最初に出現する位置を返します。これはC言語標準ライブラリのstrpbrk関数に相当する機能となります。文字型の値を受け取るfind_first_of関数とfind関数は同じ動作をします(一般的には速度的な違いもありません)。find_first_not_of/find_last_not_of文字/文字集合に一致しない位置を検索するためのfind_first_not_of/find_last_not_ofメンバ関数も存在します。2アルゴリズム関数による検索algorithmヘッダーのテンプレート関数を用いることで、イテレータの活用や検索範囲の指定による、より柔軟な検索が行えます。関数は文字型の値等の要素に対する検索に対応しています。関数は文字列等のサブシーケンスの検索に対応しています。これらのアルゴリズム関数はstd::string型以外にも配列型やstd::vector等のコンテナ、C言語スタイルの文字列に対する検索も可能となっています。文字等の単一の要素を検索する場合には、algorithmヘッダーのfind系アルゴリズム関数を用いることができます。基本的な動作は先程紹介したstd::string型のメンバ関数のものと同等ですが、検索範囲の指定にイテレータを用いる点が異なります。戻り値も同様にイテレータとなります。1;第一引数から第二引数に検索先のシーケンスの範囲を指定します。第三引数には検索したい文字などの条件を指定します。文字が見つからなかった場合にはシーケンス中の終端要素(第二引数に指定された値)が返されます。以下のサンプルはC言語スタイルの文字列に対する検索を行う場合の例です。C言語標準ライブラリのstrchr関数の活用例に相当する処理となります。文字列を検索する場合にはalgorithmヘッダーのアルゴリズム関数std::search/std::find_endを用います。両関数の戻り値は出現位置のインデックスではなく、一致した文字列の位置を指すイテレータとなります。search関数は検索文字列が最初に一致した位置、find_endは最後に一致した位置を返します。(部分文字列の抽出)}第一引数から第二引数には検索先のシーケンスの範囲を指定し、第三引数から第四引数には検索対象のサブシーケンスの範囲を指定します。サブシーケンスが見つからなかった場合にはシーケンスの終端を表すイテレータが返されます。サブシーケンスが空文字の場合にはsearch関数はシーケンス中の先頭の位置を指すイテレータを返す点に注意が必要です。