strcmp()可以在c ++中使用字符串吗?

Ale*_*sio 2 c++ string strcmp

我有这行代码

if(strcmp(ob[i].getBrand(), ob[j].getBrand()) > 0)
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

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

这是否意味着strcmp不能使用字符串,而是必须将其转换为char?

Mar*_*cia 9

不要用strcmp.使用std::string::compare与...具有相同的行为strcmp.

if(ob[i].getBrand().compare(ob[j].getBrand()) > 0)
Run Code Online (Sandbox Code Playgroud)

或者更好

if(ob[i].getBrand() > ob[j].getBrand())
Run Code Online (Sandbox Code Playgroud)

通常,您应该std::string::compare在必须测试字符串不同的各种情况时使用,例如

auto cmp = ob[i].getBrand().compare(ob[j].getBrand());

if(cmp == 0) ...
else if(cmp > 0) ...
else if(cmp < 0) ...
Run Code Online (Sandbox Code Playgroud)

这样你只需要对字符串进行一次比较操作.

但是,在你的情况下,你显然只需要在一个案例中使用比较结果(我真的假设,因为我不知道给出的代码的上下文),那么operator >就足够了,并且很多眼睛更容易(大脑!).

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

Bas*_*tch 6

如果getBrand() 给出一个std::string 正确的使用>比较.