На этом шаге мы рассмотрим особенности использования операции стравнения строк.
Для строк определены стандартные операторы сравнения. В качестве операндов могут использоваться как строки, так и С-строки:
std::string s1,s2; . . . . s1 == s2 // Возвращает true, если s1 и s2 содержат одинаковые символы s1 < "hello" // Проверяет, что s1 меньше С-строки "hello"
При сравнении строк операторами <, <=, > и >= символы сравниваются в лексикографическом порядке в соответствии с их текущими трактовками. Например, все следующие условия равны true:
std::string("aaaa") < std::string("bbbb")
std::string("aaaa") < std::string("abba")
std::string("aaaa") < std::string("aaaaaa")
При помощи функций compare() можно сравнивать подстроки. Эти функции позволяют использовать более одного аргумента для определения строк, поэтому подстрока может задаваться индексом и длиной. Помните, что функции compare() возвращают не логический признак, а целочисленный код. Ноль является признаком совпадения строк; отрицательное значение указывает на то, что *this меньше заданной строки, а положительное значение - что *this больше. Пример:
std::string s('abcd");
s.compare("abcd") // Возвращает 0
s.compare("dcba") // Возвращает значение <0 (s меньше)
s.compare("ab") // Возвращает значение >0 (s больше)
s.compare(s) // Возвращает 0 (s равно s)
s.compare(0,2,s,2,2) // Возвращает значение <0 ("ab" меньше "cd")
s.compare(1,2,"bcx",2) // Возвращает 0 ("bc" равно "bc")
Если сравнение должно производиться по другому критерию, вы можете определить этот критерий и воспользоваться алгоритмами сравнения STL или же применить специальные трактовки символов, позволяющие сравнивать строки без учета регистра символов. Но так как строки со специальным классом трактовок относятся к другому типу данных, они не могут комбинироваться с объектами типа string.
Со следующего шага мы начнем знакомиться со способами модификации строк.