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

>

Если необходимо использовать несколько значений, можно применить косвенную форму инициализации копией при явном создании временного объекта для копирования.

>string s8 = string(10, 'c'); // инициализация копией; s8 - сссссссссс

Инициализатор строки >s8>string(10, 'c') — создает строку заданного размера, заполненную указанным символьным значением, а затем копирует ее в строку >s8. Это эквивалентно следующему коду:

>string temp(10, 'c'); // temp - сссссссссс

>string s8 = temp;     // копировать temp в s8

Хотя используемый для инициализации строки >s8 код вполне допустим, он менее читабелен и не имеет никаких преимуществ перед способом, которым была инициализирована переменная >s7.

3.2.2. Операции со строками

Наряду с определением способов создания и инициализации объектов класс определяет также операции, которые можно выполнять с объектами класса. Класс может определить обладающие именем операции, такие как функция >isbn() класса >Sales_item (см. раздел 1.5.2). Класс также может определить то, что означают различные символы операторов, такие как ><< или >+, когда они применяются к объектам класса. Наиболее распространенные операции класса >string приведены в табл. 3.2.


Таблица 3.2. Операции класса >string

>os << sВыводит строку >s в поток вывода >os. Возвращает поток >os
>is >> sЧитает разделенную пробелами строку >s из потока >is. Возвращает поток >is
>getline(is, s)Читает строку ввода из потока >is в переменную >s. Возвращает поток >is
>s.empty()Возвращает значение >true, если строка >s пуста. В противном случае возвращает значение >false
>s.size()Возвращает количество символов в строке >s
>s[n]Возвращает ссылку на символ в позиции >n строки >s; позиции отсчитываются от 0
>s1 + s2Возвращает строку, состоящую из содержимого строк >s1 и >s2
>s1 = s2Заменяет символы строки >s1 копией содержимого строки >s2
>s1 == s2 s1 != s2Строки >s1 и >s2 равны, если содержат одинаковые символы. Регистр символов учитывается
><, ><=, >>, >>=Сравнение зависит от регистра и полагается на алфавитный порядок символов
Чтение и запись строк

Как уже упоминалось в главе 1, для чтения и записи значений встроенных типов, таких как >int, >double и т.д., используется библиотека >iostream. Для чтения и записи строк используются те же операторы ввода и вывода.

>// Обратите внимание: перед компиляцией этот код следует дополнить

>// директивами #include и объявлениями using

>int main() {

> string s;          // пустая строка

> cin >> s;          // чтение разделяемой пробелами строки в s

> cout << s << endl; // запись s в поток вывода

> return 0;

>}

Программа начинается с определения пустой строки по имени >s. Следующая строка читает данные со стандартного устройства ввода и сохраняет их в переменной >s. Оператор ввода строк читает и отбрасывает все предваряющие непечатаемые символы (например, пробелы, символы новой строки и табуляции). Затем он читает значащие символы, пока не встретится следующий непечатаемый символ.

Таким образом, если ввести >" Hello World! " (обратите внимание на предваряющие и завершающие пробелы), фактически будет получено значение >"Hello" без пробелов.