strcmp 或 string::compare?

问题描述 投票:0回答:7

我想比较两个字符串。可以用

strcmp
吗? (我尝试过,但似乎不起作用)。
string::compare
有解决办法吗?

除此之外,还有没有办法比较

string
char


感谢您的早期评论。我正在用 C++ 编码,是的,就像你们中的一些人提到的那样

std::string
。 我没有发布代码是因为我想学习常识,而且代码很长,所以与问题无关。

我想我了解了 C++ 和 C 之间的区别,感谢您指出这一点。我现在将尝试使用重载运算符。顺便说一句,

string::compare
也有效。

c++ c string char string-comparison
7个回答
32
投票

对于 C++,使用

std::string
并使用
string::compare
进行比较。

对于 C,请使用

strcmp
。如果你的(我的意思是你的程序)字符串(出于某种奇怪的原因)没有
nul
终止,请使用
strncmp
代替。

但是为什么有人使用像

==
这样简单的东西来代替
std::string


15
投票

假设您的意思是

std::string
,为什么不使用重载运算符:
str1 == str2
str1 < str2


4
投票

参见

std::basic_string::compare
std::basic_string
运算符参考
(特别是存在
operator==
operator!=
operator<
等)。您还需要什么?


1
投票

使用 C++ 时,请使用 C++ 函数,即。

string::compare
。当使用 C 并且您被迫使用
char*
作为字符串时,请使用
strcmp


1
投票

根据你的问题,“有没有办法将字符串与字符进行比较?”你的意思是“我如何找出字符串中是否包含特定字符?”如果是这样,C 库函数:

  char *strchr(const char *s, int c);

会为你做的。

--皮特


1
投票

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

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

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

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

免责声明:在我的 HTC 上打字,保留拼写错误:)


0
投票

如果你已经有一个字符串对象,更简单的是 == ,如上所述,但是如果你必须 string(stuff),其中 stuff 是 char *,我会使用 strcmp,至少我确信性能更高。如果您不介意成为 C++ 大师,则不禁止使用 C 语言。

© www.soinside.com 2019 - 2024. All rights reserved.