さて、ここでいくつかの点を指摘する必要があります。
文字列がchar配列/ポインタを意味する場合、演算子のオーバーロードはユーザー定義型でのみ許可されるため、演算子==をオーバーロードすることはできません。
文字列が意味する場合、std::string
演算子==もオーバーロードできません。これは、すでにオーバーロードされているためです:)
大文字と小文字を区別しない比較を行うための最善のアプローチは、などの名前付き関数を使用することcase_insensitive_equal
です。Boostには1つあります-boost::iequals(str1, str2)
大文字と小文字を区別しない文字列型を作成するために、独自の文字列を作成することができます。char_traits
大文字と小文字を区別しない方法で文字列を比較する関数を作成する方法については、次のようにします。
bool case_insensitive_equal(const std::string& s1, const std::string& s2)
{
if(s1.length() != s2. length())
return false;
for(int i = 0; i < s1.length(); ++i)
if(std::toupper(s1[i]) != std::toupper(s2[i])) //tolower would do as well
return false;
return true;
}
std::transform
ループの代わりにとを使用できますがstd::equal
、これはより効率的だと思います。