【问题标题】:How to compare strings如何比较字符串
【发布时间】:2011-06-03 03:10:37
【问题描述】:

我想比较一个字符串而不实际将其中一个定义为字符串,像这样,

if (string == "add")

我必须将"add" 声明为字符串还是可以以类似的方式进行比较?

【问题讨论】:

  • string的类型是什么?它是一个 C++ std::string 对象,还是只是一个 const char*
  • @e.James awnser 很好。另外值得一提的是,字符串或字符序列文字应该用"(双引号)括起来,单引号用于单字符文字。

标签: c++ string compare


【解决方案1】:

在 C++ 中,std::string 类实现了comparison operators,因此您可以使用== 进行比较,就像您所期望的那样:

if (string == "add") { ... }

如果使用得当,operator overloading 是一个出色的 C++ 功能。

【讨论】:

  • 现在我真的很困惑。如果stringstd::string 对象,这将起作用,但strcmp()起作用。它是哪一个?我很想知道! :)
  • 但是需要注意的是,如果“string”是char*,比较会产生不同的结果!
  • e.James:如果 "string" 是 std::string,那么 if( strcmp(string.c_str(),"add")==0 ) {...} 会起作用。
  • @frunsi:是的,但那真的是不必要的。我指的是 Anon 在 Christopher Armstrong 的回答中的评论(他说 if (strcmp(string, "add") == 0) { ... } 有效。
  • @frunsi:我担心string char*,在这种情况下这是错误的答案。我希望 Anon 能澄清这一点。
【解决方案2】:

您需要使用strcmp

if (strcmp(string,"add") == 0){
    print("success!");
}

【讨论】:

  • 注意:strcmp() 是一个 C 函数,它将指向 const char* 的指针作为其参数。它在这种情况下有效,因为 std::string 对象被转换回 const char*,但这不是在 C++ 中做事的最佳方式
  • @e.James:不,std::string 不会隐式转换为const char*,您需要为此调用s.c_str()。但是根据“没有将任何一个定义为字符串”的问题,string 不是 std::string 开始的。
  • @Ben Voigt:啊,是的,关于下转换,你是对的。我的错。
  • 在 C 代码中,您应该更喜欢 strncmp() 而不是 strcmp(),这是更安全的解决方案。
【解决方案3】:

你可以使用strcmp():

/* strcmp example */
#include <stdio.h>
#include <string.h>

int main ()
{
  char szKey[] = "apple";
  char szInput[80];
  do {
     printf ("Guess my favourite fruit? ");
     gets (szInput);
  } while (strcmp (szKey,szInput) != 0);
  puts ("Correct answer!");
  return 0;
}

【讨论】:

  • 这会起作用(因为 C++ 与 C 向后兼容)但它不是在 C++ 中做事的最佳方式
  • 这也有缓冲区溢出问题,szInput没有长度检查
【解决方案4】:

我们在 C++ 计算机语言中使用以下指令集。

目的:验证std::string容器内的值是否等于“add”:

if (sString.compare(“add”) == 0) { //if equal
    // Execute
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-05
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多