Ant*_*hov 1 c++ string operator-overloading comparison-operators
我是一名新c++程序员,我最近才了解到运算符重载.在处理独立项目时,我遇到了一个问题,我想将用户输入字符串与其他字符串进行比较,以便用户可以浏览简单的菜单.唯一的问题是我不知道如何比较两个字符串,而忽略了这种情况.如果有一个更简单的方法来做这个而不是重载==操作符,请告诉我,但也让我知道如何重载==操作符的字符串,因为我很感兴趣.
多么棒的社区.非常感谢你们,你们很快就回答了我的问题而没有让我感到愚蠢!
好吧,我需要在这里提出几点意见.
如果用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::transform和std::equal,但我认为这是更有效的.
| 归档时间: |
|
| 查看次数: |
4945 次 |
| 最近记录: |