strcmp()函数能够在C++中用于字符串吗?

4
我有这么一行代码。
if(strcmp(ob[i].getBrand(), ob[j].getBrand()) > 0)

我遇到了这个错误:

错误 C2664: 'strcmp' : 无法将参数 1 从 'std::string' 转换为 'const char *'

这是否意味着strcmp不能处理字符串,而必须将其转换为char类型?


4
无需转换任何内容,只需使用std::string::c_str()成员函数即可。 - juanchopanza
如果你必须使用strcmp,你可以这样做。我更喜欢Mark Garcia的答案。 - CashCow
3个回答

13
不要使用 strcmp,而应该使用 std::string::compare。后者的行为与前者相同。
if(ob[i].getBrand().compare(ob[j].getBrand()) > 0)

要更好的话

if(ob[i].getBrand() > ob[j].getBrand())

通常情况下,当你需要测试字符串不同时的各种情况时,应使用std::string::compare
auto cmp = ob[i].getBrand().compare(ob[j].getBrand());

if(cmp == 0) ...
else if(cmp > 0) ...
else if(cmp < 0) ...

通过这种方式,你只需要对字符串进行一次比较操作。

然而,在你的情况下,如果很明显你只需在一个场景中使用比较结果(我假设如此,因为我不知道给出代码的上下文),那么operator >就足够了,并且更容易让人理解。


2
比较函数实际上来自于char_traits,当然对于std::string,compare将调用char_traits<char>的比较函数。这意味着您可以使用不同的char_traits实现来处理不同的比较(在某些情况下可能与strcmp的工作方式不同)。顺便提一下,它使用的是memcmp而不是strcmp,因此如果字符串具有负字符,则我不确定它是否完全相同。 - CashCow

6
如果 getBrand() 返回一个 std::string,只需要使用 > 进行比较。

2

只需使用.c_str()string转换为字符数组,然后您就可以使用strcmp()。

但在您的情况下,使用>更好 :)


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