Стандартная библиотека C++ <iomanip>

<iomanip>Это заголовочный файл в стандартной библиотеке C++, который предоставляет форматированные операции для потоков ввода/вывода.

iomanipФункции в библиотеке позволяют разработчикам управлять форматированием вывода, например задавать количество цифр после десятичной точки, ширину, выравнивание и т. д.

iomanipЭто сокращение от Input/Output Manipulators — оно предоставляет набор операторов для управления форматированием потоков ввода/вывода в стандартной библиотеке C++ и применимо в следующих сценариях:

  • Обработка форматов чисел с плавающей точкой в научных вычислениях;
  • Выравнивание и оформление данных;
  • Отображение числовых значений в заданной системе счисления или формате.

Синтаксис

iomanipФункции в библиотеке обычно используются с<<и>>Используются вместе с операторами для управления потоком вывода.

Ниже приведены некоторые часто используемыеiomanipФункции:

Функции/манипуляторыОсобенностиПример кодаВывод результата
std::setw(int n)Установить ширину поля, задающую ширину для следующего вывода.std::cout << std::setw(5) << 42;42
std::setfill(char)Установить символ заполнения (по умолчанию — пробел)std::cout << std::setfill('*') << std::setw(5) << 42;***42
std::leftУстановить выравнивание по левому краюstd::cout << std::left << std::setw(5) << 42;42
std::rightУстановить выравнивание по правому краюstd::cout << std::right << std::setw(5) << 42;42
std::internalЗнак — слева, остальное — справаstd::cout << std::internal << std::setw(5) << -42;- 42
std::setprecision(int)Установить количество значащих цифр для чисел с плавающей запятойstd::cout << std::setprecision(3) << 3.14159;3.14
std::fixedУстановить формат с фиксированной точкой для вывода чисел с плавающей запятойstd::cout << std::fixed << std::setprecision(2) << 3.14159;3.14
std::scientificУстановить экспоненциальный формат для вывода чисел с плавающей запятойstd::cout << std::scientific << 3.14159;3.141590e+00
std::hexУстановить отображение целых чисел в шестнадцатеричном формате (основание 16)std::cout << std::hex << 42;2a
std::octУстановить отображение целых чисел в восьмеричном формате (основание 8)std::cout << std::oct << 42;52
std::decУстановить отображение целых чисел в системе счисления с основанием 10 (по умолчанию).std::cout << std::dec << 42;42
std::showbaseОтображать префикс основания (например,0xобозначающий шестнадцатеричное число)std::cout << std::showbase << std::hex << 42;0x2a
std::noshowbaseСкрывать префикс основания (по умолчанию)std::cout << std::noshowbase << std::hex << 42;2a
std::uppercaseОтображать шестнадцатеричные буквы в верхнем регистреstd::cout << std::uppercase << std::hex << 42;2A
std::nouppercaseШестнадцатеричные буквы отображаются в нижнем регистре (по умолчанию).std::cout << std::nouppercase << std::hex << 42;2a
std::showposОтображать перед положительными числами+символstd::cout << std::showpos << 42;+42
std::noshowposНе отображать для положительных чисел+Знак (по умолчанию)std::cout << std::noshowpos << 42;42
std::boolalphaЛогические значенияtrue/falseВыводstd::cout << std::boolalpha << true;true
std::noboolalphaЛогические значения1/0Вывод (по умолчанию)std::cout << std::noboolalpha << true;1
std::setbase(int n)Установить основание целых чисел (поддерживаются 8, 10, 16).std::cout << std::setbase(16) << 42;2a
std::resetiosflagsСбросить указанное состояние потокаstd::cout << std::resetiosflags(std::ios::showbase) << std::hex << 42;2a
std::setiosflagsУстановить указанное состояние потокаstd::cout << std::setiosflags(std::ios::showbase) << std::hex << 42;0x2a

Пример

1. Установка ширины

ИспользованиеsetwМожно задать ширину вывода. Если количество символов в выводимом содержимом меньше заданной ширины, оставшаяся часть будет заполнена пробелами.

Пример

#include <iostream>
#include <iomanip>

int main() {
    std::cout << std::setw(10) << "Hello" << std::endl;
    return 0;
}

Вывод:

Hello

2. Установка точности

ИспользованиеsetprecisionМожно задать количество значащих цифр для чисел с плавающей запятой.

Пример

#include <iostream>
#include <iomanip>

int main() {
    double pi = 3.141592653589793;
    std::cout << "Default: " << pi << "\n";
    std::cout << "Set precision (3): " << std::setprecision(3) << пи << "\n";
    std::cout << "Set precision (7): " << std::setprecision(7) << пи << "\n";
    return 0;
}

Вывод:

Default: 3.14159
Set precision (3): 3.14
Set precision (7): 3.141593

3. Формат с фиксированной точкой и научная нотация

fixedиscientificМожно управлять форматом вывода чисел с плавающей запятой.

Пример

#include <iostream>
#include <iomanip>

int main() {
    double num = 123456789.0;
    std::cout << "Fixed: " << std::fixed << num << std::endl;
    std::cout << "Scientific: " << std::scientific << num << std::endl;
    return 0;
}

Вывод:

Fixed: 123456789.000000
Scientific: 1.23456789e+08

4. Настройка заполняющего символа

ИспользованиеsetfillМожно задать заполняющий символ, обычно с помощьюsetwИспользуются вместе.

Пример

#include <iostream>
#include <iomanip>

int main() {
    std::cout << std::setfill('*') << std::setw(10) << "World" << std::endl;
    return 0;
}

Вывод:

*****World

5. Установка и сброс флагов формата

setiosflagsиresetiosflagsМожно устанавливать или сбрасывать флаги формата потока.

Пример

#include <iostream>
#include <iomanip>

int main() {
    std::cout << std::setiosflags(std::ios::uppercase) << std::hex << 255 << std::endl;
    std::cout << std::resetiosflags(std::ios::uppercase) << std::hex << 255 << std::endl;
    return 0;
}

Вывод:

FF
ff
Другие расширения