×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 75 из 714 Настройки
, >>, ><=, >>=) проверяют, меньше ли одна строка другой, больше, меньше или равна, больше или равна другой. Эти операторы используют ту же стратегию, старшинство символов в алфавитном порядке в зависимости от регистра.

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). Это эквивалентно следующему коду: