【问题标题】:Using strcmp on a vector在向量上使用 strcmp
【发布时间】:2016-05-02 02:39:25
【问题描述】:

我有一个字符串向量,我想将向量的第一个元素与一堆不同的“字符串”进行比较。

这是我想做的:

if (strcmp(myString[0], 'a') == 0)

但是 strcmp 不起作用。我基本上想用一堆不同的字符检查 myString[0] 的内容,看看是否匹配。所以会是这样的

if (strcmp(myString[0], 'a') == 0){
}
else if (strcmp(myString[0], 'ah') == 0){
}
else ifif (strcmp(myString[0], 'xyz') == 0)

等等。

我可以用什么来做这个比较?编译器抱怨“不存在从 std:string 到“constant char*”的合适转换,所以我知道它不喜欢我做一个字符串到 char 的比较,但我不知道如何正确地做到这一点。

【问题讨论】:

  • "a"'a' 不同。

标签: c++ string char strcmp


【解决方案1】:

std::string重载operator==做字符串比较,所以相当于

if (strcmp(cString, "other string") == 0)

if (cppString == "other string")

所以你的代码变成(例如)

else if (myString[0] == "ah")

【讨论】:

    【解决方案2】:

    'a' 不是字符串,它是字符常量。您需要使用"a""ah""xyz"等。

    另外,如果你想使用strcmp,你需要使用:

    if (strcmp(myString[0].c_str(), "a") == 0)
    

    您还可以使用重载的operator==std::stringchar const* 进行比较。

    if (myString[0] == "a")
    

    【讨论】:

      【解决方案3】:

      您已将此帖子标记为 C++。

      将向量的第一个元素与一堆不同的元素进行比较 “字符串”。

      如果我正确阅读了您的帖子,则向量的第一个元素是 std::string。

      std::string 有一个函数和一个运算符用于字符串到字符串的比较。

      函数用法如下:

      if (0 == pfnA.compare(pfnB))
      

      如 cppreference.com 中所述:

      std::string.compare(std::string) 的返回值为

      • 如果 *this 按字典顺序出现在参数指定的字符序列之前,则为负值

      • 如果 *this 出现在参数指定的字符序列之后,则为正值,按字典顺序

      • 如果两个字符序列比较相等,则为零

      如前所述,operator==() 在两个字符串相同时返回 true。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-12
        • 1970-01-01
        • 1970-01-01
        • 2011-01-25
        • 1970-01-01
        相关资源
        最近更新 更多