<分区>
我是一名新的 c++
程序员,我最近才了解运算符重载。在处理一个独立项目时,我遇到了一个问题,我想将用户输入的字符串与其他字符串进行比较,以允许用户在一个简单的菜单中导航。唯一的问题是我不知道如何在忽略大小写的情况下比较两个字符串。如果有比重载 ==
运算符更简单的方法,请告诉我,同时让我知道如何为字符串重载 ==
运算符因为我很感兴趣。
多么棒的社区。非常感谢你们,你们很快就回答了我的问题,没有让我觉得自己很笨!
<分区>
我是一名新的 c++
程序员,我最近才了解运算符重载。在处理一个独立项目时,我遇到了一个问题,我想将用户输入的字符串与其他字符串进行比较,以允许用户在一个简单的菜单中导航。唯一的问题是我不知道如何在忽略大小写的情况下比较两个字符串。如果有比重载 ==
运算符更简单的方法,请告诉我,同时让我知道如何为字符串重载 ==
运算符因为我很感兴趣。
多么棒的社区。非常感谢你们,你们很快就回答了我的问题,没有让我觉得自己很笨!
最佳答案
好吧,我需要在这里说明几点。
如果字符串是指字符数组/指针,则不能重载运算符 ==,因为运算符重载仅允许用于用户定义的类型
如果字符串是指 std::string
,那么您也不能重载运算符 ==,因为它已经重载了:)
为了进行不区分大小写的比较,最好的方法是使用一个命名函数,例如 case_insensitive_equal
。 Boost 有一个 - 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
代替循环,但我认为这更有效。
关于c++ - 如何在 C++ 中为字符串类重载 == 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494078/