×
Traktatov.net » Язык программирования C++. Пятое издание » Читать онлайн
Страница 76 из 714 Настройки

>string s6 = (s1 + ", ") + "world";

Часть >s1 + ", " выражения возвращает объект класса >string, она составляет левый операнд второго оператора >+. Это эквивалентно следующему коду:

>string tmp = s1 + ", "; // ok: + имеет строковый операнд

>s6 = tmp + "world";     // ok: + имеет строковый операнд

С другой стороны, инициализация переменной >s7 недопустима, и это становится очевидным, если заключить часть выражения в скобки:

>string s7 = ("hello" + ", ") + s2; // ошибка: нельзя сложить строковые

>                                   // литералы

Теперь довольно просто заметить, что первая часть выражения суммирует два строковых литерала. Поскольку это невозможно, оператор недопустим.

По историческим причинам и для совместимости с языком С строковые литералы не принадлежат к типу >string стандартной библиотеки. При использовании строковых литералов и библиотечного типа >string, не следует забывать, что это разные типы.

Упражнения раздела 3.2.2

Упражнение 3.2. Напишите программу, читающую со стандартного устройства ввода по одной строке за раз. Измените программу так, чтобы читать по одному слову за раз.

Упражнение 3.3. Объясните, как символы пробелов обрабатываются в операторе ввода класса >string и в функции >getline().

Упражнение 3.4. Напишите программу, читающую две строки и сообщающую, равны ли они. В противном случае программа сообщает, которая из них больше. Затем измените программу так, чтобы она сообщала, одинаковая ли у строк длина, а в противном случае — которая из них длиннее.

Упражнение 3.5. Напишите программу, читающую строки со стандартного устройства ввода и суммирующую их в одну большую строку. Отобразите полученную строку. Затем измените программу так, чтобы отделять соседние введенные строки пробелами.

3.2.3. Работа с символами строки

Зачастую приходится работать с индивидуальными символами строки. Например, может понадобиться выяснить, является ли определенный символ пробелом, или изменить регистр символов на нижний, или узнать, присутствует ли некий символ в строке, и т.д.

Одной из частей этих действий является доступ к самим символам строки. Иногда необходима обработка каждого символа, а иногда лишь определенного символа, либо может понадобиться прекратить обработку, как только выполнится некое условие. Кроме того, это наилучший способ справиться со случаями, когда задействуются разные языковые и библиотечные средства.

Другой частью обработки символов является выяснение и (или) изменение их характеристик. Эта часть задачи выполняется набором библиотечных функций, описанных в табл. 3.3. Данные функции определены в заголовке >cctype.


Таблица 3.3. Функции >cctype

>isalnum(с)Возвращает значение >true, если является буквой или цифрой
>isalpha(с)Возвращает значение >true, если — буква
>iscntrl(с)Возвращает значение >true, если — управляющий символ
>isdigit(с)Возвращает значение >true, если — цифра
>isgraph(с)Возвращает значение >true, если — не пробел, а печатаемый символ
>islower(с)Возвращает значение >true, если — символ в нижнем регистре
>isprint(с)Возвращает значение >true, если