>>
, ><=
, >>=
) проверяют, меньше ли одна строка другой, больше, меньше или равна, больше или равна другой. Эти операторы используют ту же стратегию, старшинство символов в алфавитном порядке в зависимости от регистра.1. Если длина у двух строк разная и если каждый символ более короткой строки совпадает с соответствующим символом более длинной, то короткая строка меньше длинной.
2. Если символы в соответствующих позициях двух строк отличаются, то результат сравнения определяется первым отличающимся символом.
Для примера рассмотрим следующие строки:
>string str = "Hello";
>string phrase = "Hello World";
>string slang = "Hiya";
Согласно правилу 1 строка >str
меньше строки >phrase
. Согласно правилу 2 строка >slang
больше, чем строки >str
и >phrase
.
Как правило, библиотечные типы столь же просты в применении, как и встроенные. Поэтому большинство библиотечных типов поддерживают присвоение. Строки не являются исключением, один объект класса >string
вполне можно присвоить другому.
>string st1(10, 'c'), st2; // st1 - сссссссссс; st2 - пустая строка
>st1 = st2; // присвоение: замена содержимого st1 копией st2
> // теперь st1 и st2 - пустые строки
Результатом сложения двух строк является новая строка, объединяющая содержимое левого операнда, а затем правого. Таким образом, при применении оператора суммы (оператор >+
) к строкам результатом будет новая строка, символы которой являются копией символов левого операнда, сопровождаемые символами правого операнда. Составной оператор присвоения (оператор >+=
) (см. раздел 1.4.1) добавляет правый операнд к строке слева:
>string s1 = "hello, ", s2 = "world\n";
>string s3 = s1 + s2; // s3 - hello, world\n
>s1 += s2; // эквивалентно s1 = s1 + s2
Как уже упоминалось в разделе 2.1.2, один тип можно использовать там, где ожидается другой тип, если есть преобразование из данного типа в ожидаемый. Библиотека >string
позволяет преобразовывать как символьные, так и строковые литералы (см. раздел 2.1.3) в строки. Поскольку эти литералы можно использовать там, где ожидаются строки, предыдущую программу можно переписать следующим образом:
>string s1 = "hello", s2 = "world"; // в s1 и s2 нет пунктуации
>string s3 = s1 + ", " + s2 + '\n';
Когда объекты класса >string
смешиваются со строковыми или символьными литералами, то по крайней мере один из операндов каждого оператора >+
должен иметь тип >string
.
>string s4 = s1 + ", "; // ok: сложение строки и литерала
>string s5 = "hello" + ", "; // ошибка: нет строкового операнда
>string s6 = s1 + ", " + "world"; // ok: каждый + имеет
> // строковый операнд
>string s7 = "hello" + ", " + s2; // ошибка: нельзя сложить строковые
> // литералы
В инициализации переменных >s4
и >s5
задействовано только по одному оператору, поэтому достаточно просто проверить его корректность. Инициализация переменной >s6
может показаться странной, но работает она аналогично объединенным в цепочку операторам ввода или вывода (см. раздел 1.2). Это эквивалентно следующему коду: