如何在c ++中为字符串类重载==运算符?

Ant*_*hov 1 c++ string operator-overloading comparison-operators

我是一名新c++程序员,我最近才了解到运算符重载.在处理独立项目时,我遇到了一个问题,我想将用户输入字符串与其他字符串进行比较,以便用户可以浏览简单的菜单.唯一的问题是我不知道如何比较两个字符串,而忽略了这种情况.如果有一个更简单的方法来做这个而不是重载==操作符,请告诉我,但也让我知道如何重载==操作符的字符串,因为我很感兴趣.

多么棒的社区.非常感谢你们,你们很快就回答了我的问题而没有让我感到愚蠢!

Arm*_*yan 5

好吧,我需要在这里提出几点意见.

  • 如果用string表示char数组/指针,则不能重载operator ==,因为只允许用户定义类型的运算符重载

  • 如果你的意思是字符串std::string,那么你也不能重载operator ==,因为它已经超载了:)

  • 为了进行不区分大小写的比较,最好的方法是使用命名函数,例如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;
}
Run Code Online (Sandbox Code Playgroud)

相反,循环的,你可以使用std::transformstd::equal,但我认为这是更有效的.