Чтение онлайн

ЖАНРЫ

Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:

Б.7.6. Стандартные манипуляторы

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

<ios>
,
<istream>
,
<ostream>
,
<iostream>
и
<iomanip>
(для манипуляторов, получающих аргументы).

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

потока
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.

Б.8. Манипуляции строками

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

<cctype>
, строки с соответствующими операциями в заголовке
<string>
, регулярные выражения в заголовке
<regex>
(C++0x) и поддержка С-строк в заголовке
<cstring>
.

Б.8.1. Классификация символов

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

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

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

Б.8.2. Строки

Класс

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

Б.8.3. Сравнение регулярных выражений

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

<regex>
.

Поиск (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<int>(matches[1]);

int field2 = from_string<int>(matches[2]);

int field3 = from_string<int>(matches[3]);

// ...

}

Синтаксис регулярных выражений основан на символах, имеющих особый смысл (см. главу 23).

Некоторые классы символов поддерживаются аббревиатурами.

Б.9. Численные методы

В стандартной библиотеке языка C++ содержатся основные строительные конструкции для математических (научных, инженерных и т.д.) вычислений.

Б.9.1. Предельные значения

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

В заголовке

<limits>
определен класс
numeric_limits <T>
для каждого встроенного или библиотечного типа
T
. Кроме того, программист может определить класс
numeric_limits<X>
для пользовательского числового типа
X
. Рассмотрим пример.

class numeric_limits<float> {

public:

static const bool is_specialized = true;

static const int radix = 2; // основание системы счисления

// (в данном случае двоичная)

static const int digits = 24; // количество цифр в мантиссе

// в текущей системе счисления

static const int digits10 = 6; // количество десятичных цифр

Поделиться с друзьями: