На этом шаге мы рассмотрим особенности использования операции стравнения строк.
Для строк определены стандартные операторы сравнения. В качестве операндов могут использоваться как строки, так и С-строки:
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.
Со следующего шага мы начнем знакомиться со способами модификации строк.