Стандартная библиотека 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 <iomanip>
int main() {
std::cout << std::setw(10) << "Hello" << std::endl;
return 0;
}
Вывод:
Hello
2. Установка точности
ИспользованиеsetprecisionМожно задать количество значащих цифр для чисел с плавающей запятой.
Пример
#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 <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 <iomanip>
int main() {
std::cout << std::setfill('*') << std::setw(10) << "World" << std::endl;
return 0;
}
Вывод:
*****World
5. Установка и сброс флагов формата
setiosflagsиresetiosflagsМожно устанавливать или сбрасывать флаги формата потока.
Пример
#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Другие расширения