С++ для начинающих


Гостиница Волхов 2

Строковые потоки - часть 3


           ostringstream format_string;

           format_string << ival << " " << pival << " "

                   << dval << " " << pdval << endl;

           // извлекает сохраненные значения в коде ASCII

           // и помещает их в четыре разных объекта

           istringstream input_istring( format_string.str() );

           input_istring >> ival >> pival

                   >> dval >> pdval;

}

Упражнение 20.16

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

int    ival = 1024;

double dval = 3.14159;

char   cval = 'a';

char  *sval = "the end";

printf( "ival: %d\tdval% %g\tcval: %c\tsval: %s",

         ival, dval, cval, sval );

печатает:

ival: 1024   dval: 3.14159  cval: a   sval: the end

Первым аргументом printf() является форматная строка. Каждый символ % показывает, что вместо него должно быть подставлено значение аргумента, а следующий за ним символ определяет тип этого аргумента. Вот некоторые из поддерживаемых типов (полное описание см. в [KERNIGHAN88]):

%d                целое число

%g                число с плавающей точкой

%c                char

%s                C-строка

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

Основные недостатки семейства функций printf() таковы: во-первых, форматная строка не обобщается на определенные пользователем типы, и, во-вторых, если типы или число аргументов не соответствуют форматной строке, компилятор не заметит ошибки, а вывод будет отформатирован неверно. Однако у функций printf() есть и достоинство – компактность записи.

1.      Получите так же отформатированный результат с помощью объекта класса ostringstream.

2.      Сформулируйте достоинства и недостатки обоих подходов.




Содержание  Назад  Вперед