c++stringcompare

Comparing strings lexicographically


I thought that if I used operators such as ">" and "<" in c++ to compare strings, these would compare them lexicographically, the problem is that this only works sometimes in my computer. For example

if("aa" > "bz") cout<<"Yes";

This will print nothing, and thats what I need, but If I type

if("aa" > "bzaa") cout<<"Yes";

This will print "Yes", why is this happening? Or is there some other way I should use to compare strings lexicographically?


Solution

  • Comparing std::string -s like that will work. However you are comparing string literals. To do the comparison you want either initialize a std::string with them or use strcmp:

    if(std::string("aa") > std::string("bz")) cout<<"Yes";
    

    This is the c++ style solution to that.

    Or alternatively:

    if(strcmp("aa", "bz") > 0) cout<<"Yes";
    

    EDIT(thanks to Konrad Rudolph's comment): in fact in the first version only one of the operands should be converted explicitly so:

    if(std::string("aa") > "bz") cout<<"Yes";
    

    Will again work as expected.

    EDIT(thanks to churill's comment): since c++14 you can use string literals:

    if("aa"s > "bz") cout<<"Yes";