strcmp还是string::compare?

15
我想比较两个字符串,使用strcmp能行吗?(我尝试了,似乎不起作用)。string::compare是一种解决方法吗?
除此之外,有没有办法将一个string与一个char进行比较?
感谢早期的评论。我在编写C ++代码,就像你们中的一些人提到的那样,它是std::string。 我没发帖子上的代码,因为我想学习通用知识,而且它是相当长的代码,所以与问题无关。
我认为我学会了C ++和C之间的区别,感谢指出这一点。现在我将尝试使用重载运算符。顺便说一句,string::compare也可以使用。

似乎不起作用 - 你能更具体一些吗?参数是什么,结果是什么? - Mark Ransom
如果你在使用C++编程,那么你应该使用C++习惯用法,这意味着使用C++的string和相关方法。对于C语言,应该使用C语言的习惯用法,例如char *strcpy - Paul R
你所说的“似乎无法工作”是什么意思? - helloworld922
“我尝试了,似乎不起作用。” => 发布您使用的代码、期望的结果以及实际得到的结果。同时,您应该明确您所说的“字符串”是什么意思(C风格的ASCIIZ字符串?std::string?还是其他什么?),以及您所说的“将字符串与字符进行比较”的含义是什么(这没有意义,就像将苹果与橙子进行比较一样)。 - Matteo Italia
@Matteo Italia,它没有起作用,因为编译器说应该是char*而不是string。我问“将字符串与字符比较”是因为我对字符串和字符感到非常困惑。现在我学到了,在C和C++中它们是完全不同的。 - Perex19
6个回答

32

对于C++,使用std::string并使用string::compare进行比较。

对于C,使用strcmp。如果您的字符串(由于某种奇怪的原因)没有以nul结尾,请改用strncmp

但为什么会有人不使用像==这样简单的方法来比较std::string呢?


5
因为compare有三种输出结果<00>0,而==只有二元的true/false输出。有时候,基于字符串比较的大小关系需要采取不同的操作。使用三种输出结果可以避免重复比较字符串。 - Daniel Stevens

15

假设您指的是 std::string,为什么不使用重载运算符:str1 == str2str1 < str2


请看我在ildjarn的帖子中的评论,了解为什么您需要其他东西。 - diverscuba23

4

1
你可能也在尝试一次性判断一个字符串是否相等、大于或小于另一个字符串(类似于决定树形结构中要走哪个分支),这种情况下,类似于 strcmp 的函数更加有用。 - diverscuba23
1
@diverscuba23:确实是个好观点。:-] 在这种情况下,仍然有std::string::compare可用,对于@Paul R评论的原因,应该优先选择它而不是C++中的strcmp。我会编辑我的帖子。 - ildjarn

1
通过你的问题,“有没有一种方法可以将字符串与字符进行比较?” 你是指“如何找出特定字符是否包含在字符串中?” 如果是这样,那么C库函数:
  char *strchr(const char *s, int c);

我会为你做的。

-- Pete


1

在使用C++时,请使用C++函数,例如string::compare。当您使用C语言并被迫使用char*作为字符串时,请使用strcmp


1

std::string 可以包含(并比较!)嵌入的空字符。

are*comp(...) 将比较 C 风格的字符串,比较到第一个空字符(或指定的最大字节数/字符数)为止。

string::compare 实际上是作为模板 basic_string 实现的,因此您可以期望它适用于其他类型,例如 wstring。

对于“将字符串与 char 比较”的不清楚短语,您可以将 char 与 *string.begin() 进行比较,或查找第一次出现(string::find_first_of 和 string::find_first_not_of)。

免责声明:在我的 HTC 上输入,保留错别字 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接