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

标签 c++ string operator-overloading comparison-operators

<分区>

我是一名新的 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::transformstd::equal 代替循环,但我认为这更有效。

关于c++ - 如何在 C++ 中为字符串类重载 == 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15494078/

相关文章:

python - 如何使用关键字和索引提取子字符串?

c++ - 无法理解赋值运算符的重载

c++ - 在重载运算符中访问另一个类的数据成员

c++ - 在 C++ 中通过引用传递三维数组

c++ - 如何加载序列化的 boost::variant?

python - python函数中的反向文本

MATLAB 重载加运算符

c++ - 最易于使用、轻量级、独立于平台的 C++ 图形库

c++ - ITK-VTK vtkResliceImageViewer 未定义

python - 正则表达式匹配字符串文字