¿Cómo puedo rellenar un int con ceros a la izquierda cuando uso el operador cout <<? [duplicar]
Quiero cout
generar un int con ceros a la izquierda, por lo que el valor 1
se imprimirá como 001
y el valor 25
se imprimirá como 025
. ¿Cómo puedo hacer esto?
Con lo siguiente,
#include <iomanip>
#include <iostream>
int main()
{
std::cout << std::setfill('0') << std::setw(5) << 25;
}
la salida será
00025
setfill
está configurado con el carácter de espacio ( ' '
) de forma predeterminada. setw
establece el ancho del campo a imprimir y listo.
Si está interesado en saber cómo formatear los flujos de salida en general, escribí una respuesta para otra pregunta, espero que sea útil: Formatear la salida de la consola C++.
Otra forma de lograr esto es utilizar printf()
la función antigua del lenguaje C.
Puedes usar esto como
int dd = 1, mm = 9, yy = 1;
printf("%02d - %02d - %04d", mm, dd, yy);
Esto se imprimirá 09 - 01 - 0001
en la consola.
También puede usar otra función sprintf()
para escribir salida formateada en una cadena como la siguiente:
int dd = 1, mm = 9, yy = 1;
char s[25];
sprintf(s, "%02d - %02d - %04d", mm, dd, yy);
cout << s;
No olvide incluir stdio.h
un archivo de encabezado en su programa para ambas funciones.
Lo que hay que tener en cuenta:
Puede llenar el espacio en blanco con 0 o con otro carácter (no un número).
Si escribe algo como %24d
un especificador de formato, esto no completará 2
los espacios en blanco. Esto configurará el pad 24
y llenará los espacios en blanco.
cout.fill('*');
cout << -12345 << endl; // print default value with no field width
cout << setw(10) << -12345 << endl; // print default with field width
cout << setw(10) << left << -12345 << endl; // print left justified
cout << setw(10) << right << -12345 << endl; // print right justified
cout << setw(10) << internal << -12345 << endl; // print internally justified
Esto produce la salida:
-12345
****-12345
-12345****
****-12345
-****12345
En C++20 puedes hacer:
std::cout << std::format("{:03}", 25); // prints 025
Mientras tanto puedes usar la biblioteca {fmt} , std::format
basada en.
Descargo de responsabilidad : soy el autor de {fmt} y C++20 std::format
.
cout.fill( '0' );
cout.width( 3 );
cout << value;