如何比较字符串
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++ 功能。
【讨论】:
现在我真的很困惑。如果string
是std::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中比较字符串的内容是不是相等内部是如何比较的?还有比较字符串与比较它的哈希值哪个快?