Biblioteca estándar de C++ <iomanip>

<iomanip>es un archivo de cabecera de la biblioteca estándar de C++ que proporciona operaciones de formato para flujos de entrada/salida.

iomanipLas funciones de la biblioteca permiten a los desarrolladores controlar el formato de salida, como establecer el número de decimales, el ancho, la alineación, etc.

iomanipes la abreviatura de Input/Output Manipulators, y proporciona un conjunto de operadores para controlar el formato de los flujos de entrada/salida en la biblioteca estándar de C++. Es adecuado para los siguientes escenarios:

  • Manejo del formato de números de punto flotante en cálculos científicos;
  • Alineación y embellecimiento de datos;
  • Mostrar valores numéricos en una base o formato específico.

Sintaxis

iomanipLas funciones de la biblioteca generalmente se combinan con<<y>>operadores para lograr el control del flujo de salida.

A continuación se presentan algunas de las más utilizadasiomanipfunciones:

Funciones/manipuladoresFunciónCódigo de ejemploResultado de salida
std::setw(int n)Establece el ancho del campo, especifica el ancho para la próxima salida.std::cout << std::setw(5) << 42;42
std::setfill(char)Establece el carácter de relleno (por defecto es un espacio)std::cout << std::setfill('*') << std::setw(5) << 42;***42
std::leftEstablece la alineación a la izquierdastd::cout << std::left << std::setw(5) << 42;42
std::rightEstablece la alineación a la derechastd::cout << std::right << std::setw(5) << 42;42
std::internalEl signo a la izquierda, el resto a la derechastd::cout << std::internal << std::setw(5) << -42;- 42
std::setprecision(int)Establece el número de dígitos significativos de los números de punto flotantestd::cout << std::setprecision(3) << 3.14159;3.14
std::fixedEstablece la salida de números de punto flotante en formato de punto fijostd::cout << std::fixed << std::setprecision(2) << 3.14159;3.14
std::scientificEstablece la salida de números de punto flotante en formato de notación científicastd::cout << std::scientific << 3.14159;3.141590e+00
std::hexEstablece la visualización de enteros en hexadecimal (base 16)std::cout << std::hex << 42;2a
std::octEstablece la visualización de enteros en octal (base 8)std::cout << std::oct << 42;52
std::decEstablece la visualización de enteros en decimal (base 10) (por defecto)std::cout << std::dec << 42;42
std::showbaseMuestra el prefijo de la base (por ejemplo,0xindica hexadecimal)std::cout << std::showbase << std::hex << 42;0x2a
std::noshowbaseOculta el prefijo de la base (por defecto)std::cout << std::noshowbase << std::hex << 42;2a
std::uppercaseLas letras hexadecimales se muestran en mayúsculasstd::cout << std::uppercase << std::hex << 42;2A
std::nouppercaseLas letras hexadecimales se muestran en minúsculas (por defecto)std::cout << std::nouppercase << std::hex << 42;2a
std::showposMuestra delante de los números positivos+el signostd::cout << std::showpos << 42;+42
std::noshowposNo muestra el+signo de los números positivos (por defecto)std::cout << std::noshowpos << 42;42
std::boolalphaLos valores booleanos se emiten comotrue/falseen la salidastd::cout << std::boolalpha << true;true
std::noboolalphaLos valores booleanos se emiten como1/0en la salida (por defecto)std::cout << std::noboolalpha << true;1
std::setbase(int n)Establece la base de los enteros (admite 8, 10, 16)std::cout << std::setbase(16) << 42;2a
std::resetiosflagsRestablece el estado de flujo especificadostd::cout << std::resetiosflags(std::ios::showbase) << std::hex << 42;2a
std::setiosflagsEstablece el estado de flujo especificadostd::cout << std::setiosflags(std::ios::showbase) << std::hex << 42;0x2a

Ejemplo

1. Configurar el ancho

Usandosetwse puede establecer el ancho de la salida. Si el número de caracteres del contenido de salida es menor que el ancho establecido, la parte restante se rellenará con espacios.

Ejemplo

#include <iostream>
#include <iomanip>

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

Resultado de salida:

Hello

2. Configurar la precisión

Usandosetprecisionse puede establecer el número de dígitos significativos de los números de punto flotante.

Ejemplo

#include <iostream>
#include <iomanip>

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

Resultado de salida:

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

3. Punto decimal fijo y notación científica

fixedyscientificSe puede controlar el formato de salida de los números de punto flotante.

Ejemplo

#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;
}

Resultado de salida:

Fixed: 123456789.000000
Scientific: 1.23456789e+08

4. Configurar el carácter de relleno

Usandosetfillse puede configurar el carácter de relleno, que generalmente se usa consetwjunto con.

Ejemplo

#include <iostream>
#include <iomanip>

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

Resultado de salida:

*****World

5. Configurar y restablecer indicadores de formato

setiosflagsyresetiosflagsSe pueden configurar o restablecer los indicadores de formato del flujo.

Ejemplo

#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;
}

Resultado de salida:

FF
ff
Otras extensiones