Can strcmp() work with strings in c++?

后端 未结 3 1615
孤独总比滥情好
孤独总比滥情好 2021-01-22 18:46

I have this line of code

if(strcmp(ob[i].getBrand(), ob[j].getBrand()) > 0)

and I get this error

error C2664: \'strcm

相关标签:
3条回答
  • 2021-01-22 19:18

    Don't use strcmp. Use std::string::compare which has the same behavior as strcmp.

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

    Or much better

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

    Generally you should use std::string::compare when you have to test various cases where the strings will be different, e.g.

    auto cmp = ob[i].getBrand().compare(ob[j].getBrand());
    
    if(cmp == 0) ...
    else if(cmp > 0) ...
    else if(cmp < 0) ...
    

    In this way you only have to do the comparison operation on the strings once.

    However, in your case where it's somehow apparent that you only have to use the comparison result in a single case (I'm really assuming, as I don't know the context of the code given), then operator > will suffice, and is much easier on the eye (the brain!).

    0 讨论(0)
  • 2021-01-22 19:20

    Simply use .c_str() to convert a string to char array, then you are able to use strcmp().

    But in your case, use > is better :)

    0 讨论(0)
  • 2021-01-22 19:25

    If getBrand() gives a std::string just use > compare.

    0 讨论(0)
提交回复
热议问题