【问题标题】:Compare two std::strings in c++在 C++ 中比较两个 std::strings
【发布时间】:2013-01-16 14:24:28
【问题描述】:

这种比较可以在 C++ 中进行吗?

std::string name = "John";

if (name == "Tom")
   flag = true;
else
   flag = false;

【问题讨论】:

  • 为什么不flag = name == "Tom";??
  • 是的,you can
  • @KerrekSB:我个人会使用flage = (name == "Tom");

标签: c++ string


【解决方案1】:

是的,因为std::string 重载operator ==const char*

或者,你可以写

flag = name == "Tom";

或使用std::string::compare(如果字符串匹配则返回0

【讨论】:

    【解决方案2】:

    要比较 c++ 中的 srtings,我建议您使用 STRCMP 来自:

    #include <string.h>
    ....
    STRCMP(name,"Tom"); // This will return 0 if they are equal
    

    所以你应该把它用作:

    if (STRCMP(name,"Tom")==0)
      flag = true;
    else
      flag = false;
    

    记得使用#include

    【讨论】:

    • 为什么老式的函数或宏或无论STRCMPstd::basic_string比较运算符更好?
    • 标准 C++ 中没有 STRCMP 这样的东西。
    • @Sascuash:在我看来,大多数人认为 op== 对人类更友好,同时考虑到如果他的意思是来自 C 的 strcmp,那么调用看起来会有所不同(除了效率更低之外甚至会导致错误的结果,具体取决于name的内容)
    • @Sascuash:完全没有,我个人可以清楚地区分=和==。如果你不能,你仍然可以写if(name=="Tom")。即使是这样,这仍然不能解决两者导致不同结果的情况。
    • @Sascuash,首先,STRCMP 是一个宏,为 Windows C++ 库(即非标准 C++)定义(如果我没记错的话)。其次,请不要推荐 C++ 中的 C 字符串处理函数——它们会导致糟糕/不安全的 C++ 编码并错过现代 C++ 代码的优势(想到 RAII)。 C++ 中的字符串比较应该使用 std::string 进行(这就是 std::string 存在的原因)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多