Сравнение строк лексикографически - программирование
Подтвердить что ты не робот

Сравнение строк лексикографически

Я думал, что если бы я использовал такие операторы, как " > " и "<", в С++ для сравнения строк они сравнивали бы их лексикографически, проблема в том, что это работает только на моем компьютере. Например

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

Это ничего не напечатает, и это то, что мне нужно, но если я наберу

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

Это напечатает "Да", почему это происходит? Или есть какой-то другой способ, который я должен использовать для сравнения строк лексикографически?

4b9b3361

Ответ 1

Сравнение std::string -s как будет работать. Однако вы сравниваете строковые литералы. Для сравнения вы хотите либо инициализировать std::string с ними, либо использовать strcmp:

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

Это решение стиля С++.

Или, альтернативно:

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

EDIT (спасибо комментарию Konrad Rudolph): на самом деле в первой версии только один из операндов должен быть явно преобразован так:

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

Будет снова работать, как ожидалось.

Ответ 2

Вы сравниваете "примитивные" строки, которые имеют тип char const *.

Ниже приведен пример, эквивалентный вашему примеру:

char const * s1 = "aa";
char const * s2 = "bz";
if ( s1 > s2 ) cout<<"Yes";

Это сравнение указателей (адресов памяти строк), а не содержимого.

@izomorphius предложил несколько хороших решений.