大文字と小文字を区別せずに 2 つの文字列を部分一致させようとしています。ほとんどの人が自分のコンパイラにブースト ライブラリを持っていないので、ブースト ライブラリを使用したくありません。標準の c++ ライブラリにある .find() を試しましたが、ユーザーが入力した文字列が既に存在する文字列の最初の単語にあるかどうかのみがチェックされます。たとえば、Harry_Potter_Goblet という名前の DVD がある場合、「goblet」または「Goblet」を検索すると、プログラムは結果として Harry_Potter_Goblet を表示しません。「Harry」の大文字と小文字を区別して検索した場合にのみ、resul は一致を示します。ここで何が間違っていますか?これが私のコードです。
1 に答える
3
大文字と小文字を区別しない文字比較関数を定義します。
#include <cctype>
bool case_insensitive_comp(char lhs, char rhs)
{
return std::toupper(lhs) == std::toupper(rhs);
}
次に、std :: searchを使用して、大きい方の文字列内のサブ文字列を見つけます。
#include <algorithm>
....
std::string s1="Harry_Potter_Goblet";
std::string s2 = "goblet";
bool found = std::search(s1.begin(), s1.end(), s2.begin(), s2.end(), case_insensitive_comp) != s1.end();
于 2013-02-11T19:53:05.040 に答える