如何比较字符串

Posted

技术标签:

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

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

if (string == "add")

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

【问题讨论】:

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

【讨论】:

以上是关于如何比较字符串的主要内容,如果未能解决你的问题,请参考以下文章

Java中比较字符串的内容是不是相等内部是如何比较的?还有比较字符串与比较它的哈希值哪个快?

java中两个字符串如何比较大小?

JS 如何比较时间大小?

java中如何比较两个时间字符串的大小

Python 2 如何比较字符串和整数?为啥列表比较大于数字,而元组大于列表?

Java基础字符串之如何比较字符串