Почти все операции ввода описаны в заголовке , за исключением операций ввода в объект класса string; эти операции описаны в заголовке :

Если не указано иное, операция ввода возвращает ссылку на объект класса istream, поэтому можно создавать цепочки таких операций, например cin>>x>>y;.

Функции get() и getline() помещают после символов, записанных в ячейки p[0] и т.д., число 0 (если символы были введены); функция getline() удаляет признак конца ввода (t из потока ввода, если он обнаружен, а функция get() этого не делает. Функция read(p,n) не записывает число 0 в массив после считанных символов. Очевидно, что операторы форматированного ввода проще в использовании и менее уязвимы для ошибок, чем операции неформатированного ввода.

<p id="AutBody_Root674"><strong>Б.7.4. Операции вывода</strong></p>

Почти все операции вывода описаны в заголовке , за исключением операции записи в объекты класса string; такие операции описаны в заголовке .

Если не указано иное, операции вставки в поток ostream возвращают ссылку на его объекты, поэтому можно создавать цепочки операций вывода, например cout << x<;.

<p id="AutBody_Root675"><strong>Б.7.5. Форматирование</strong></p>

Формат потока ввода-вывода управляется комбинацией типа объекта, состояния потока, информацией о локализации (см. раздел ) и явными операциями. Большая часть информации об этом изложена в главах 10-11. Здесь мы просто перечислим стандартные манипуляторы (операции, модифицирующие поток), поскольку они обеспечивают наиболее простой способ изменения формата.

Вопросы локализации выходят за рамки рассмотрения настоящей книги.

<p id="AutBody_Root676"><strong>Б.7.6. Стандартные манипуляторы</strong></p>

В стандартной библиотеке предусмотрены манипуляторы, соответствующие разнообразным изменениям формата. Стандартные манипуляторы определены в заголовках , , , и (для манипуляторов, получающих аргументы).

Каждая из этих операций возвращает ссылку на свой первый операнд потока s.

Рассмотрим пример.

cout << 1234 << ',' << hex << 1234 << ',' << oct << 1234 << endl;

Этот код выводит на экран следующую строку:

1234,4d2,2322

В свою очередь, код

cout << '(' << setw(4) << setfill('#') << 12 << ") (" << 12 << ")\n";

выводит на экран такую строку:

(##12) (12)

Для того чтобы явно установить общий формат вывода чисел с плавающей точкой, используйте следующую инструкцию:

b.setf(ios_base::fmtflags(0),ios_base::floatfield)

См. главу 11.

<p id="AutBody_Root677"><strong>Б.8. Манипуляции строками</strong></p>

В стандартной библиотеке предусмотрены операции классификации символов в заголовке , строки с соответствующими операциями в заголовке , регулярные выражения в заголовке (C++0x) и поддержка С-строк в заголовке .

<p id="AutBody_Root678"><strong>Б.8.1. Классификация символов</strong></p>

Символы из основного набора могут быть классифицированы так, как показано ниже.

Кроме того, в стандартной библиотеке описаны две полезные функции для изменения регистра символа.

Расширенные наборы символов, такие как Unicode, также поддерживаются стандартной библиотекой, но эта тема выходит за рамки рассмотрения настоящей книги.

<p id="AutBody_Root679"><strong>Б.8.2. Строки</strong></p>

Класс string из стандартной библиотеки представляет собой специализацию общего шаблонного класса basic_string для символьного типа char; иначе говоря, объект string — это последовательность переменных типа char.

<p id="AutBody_Root680"><strong>Б.8.3. Сравнение регулярных выражений</strong></p>

Библиотека регулярных выражений еще не является частью стандартной библиотеки, но вскоре станет ею и будет широко доступной, поэтому мы решили привести ее в этом разделе. Более подробные объяснения изложены в главе 23. Ниже перечислены основные функции из заголовка .

Поиск (searching) строки, соответствующей регулярному выражению в (произвольно длинном) потоке данных, — обеспечивается функцией regex_search().

Сопоставление (matching) регулярного выражения со строкой (известного размера) — обеспечивается функцией regex_match().

Замена соответствий (replacement of matches) — обеспечивается функцией regex_replace(); в данной книге не описывается; см. профессиональные учебники или справочники.

Результатом работы функций regex_search() и regex_match() является коллекция соответствий, как правило, представленных в виде объекта класса smatch.

regex row("^[\\w ]+(\\d+)(\\d+)(\\d+)$"); // строка данных

while (getline(in,line)) { // проверка строки данных

  smatch matches;

  if (!regex_match(line, matches, row))

  error("bad line", lineno);

  // проверка строки:

  int field1 = from_string(matches[1]);

Перейти на страницу:
Нет соединения с сервером, попробуйте зайти чуть позже