要素(文字)検索ではなく部分文字列検索(std :: string)を実行しているため、残念ながら、これを実行するために標準ライブラリですぐにアクセスできる既存のソリューションはありません。
それでも、簡単に実行できます。両方の文字列を大文字に変換するだけです(または、両方を小文字に変換します。この例では大文字を選択しました)。
std::string upper_string(const std::string& str)
{
string upper;
transform(str.begin(), str.end(), std::back_inserter(upper), toupper);
return upper;
}
std::string::size_type find_str_ci(const std::string& str, const std::string& substr)
{
return upper(str).find(upper(substr) );
}
これは(悲観的な領域に国境を接する)迅速な解決策ではありませんが、私が手に負えないことを知っている唯一の解決策です。また、効率が心配な場合は、大文字と小文字を区別しない独自のサブストリングファインダーを実装することもそれほど難しくありません。
さらに、std :: wstring/wchar_tをサポートする必要があります。何か案は?
ロケールのtolower/toupperはワイド文字列でも機能するため、上記の解決策も同様に適用可能である必要があります(std::stringをstd::wstringに変更するだけです)。
[編集]指摘されているように、別の方法は、独自の文字特性を指定することにより、basic_stringから大文字と小文字を区別しない独自の文字列型を適応させることです。これは、すべての文字列検索、比較などを受け入れて、特定の文字列タイプで大文字と小文字を区別できない場合に機能します。