¿Cómo puedo rellenar un int con ceros a la izquierda cuando uso el operador cout <<? [duplicar]

Resuelto jamieQ asked hace 14 años • 0 respuestas

Quiero coutgenerar un int con ceros a la izquierda, por lo que el valor 1se imprimirá como 001y el valor 25se imprimirá como 025. ¿Cómo puedo hacer esto?

jamieQ avatar Nov 11 '09 18:11 jamieQ
Aceptado

Con lo siguiente,

#include <iomanip>
#include <iostream>

int main()
{
    std::cout << std::setfill('0') << std::setw(5) << 25;
}

la salida será

00025

setfillestá configurado con el carácter de espacio ( ' ') de forma predeterminada. setwestablece 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++.

Khaled Alshaya avatar Nov 11 '2009 11:11 Khaled Alshaya

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 - 0001en 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.hun 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 %24dun especificador de formato, esto no completará 2los espacios en blanco. Esto configurará el pad 24y llenará los espacios en blanco.

shashwat avatar Dec 23 '2012 12:12 shashwat
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
quest333 avatar Oct 12 '2014 09:10 quest333

En C++20 puedes hacer:

std::cout << std::format("{:03}", 25); // prints 025

Mientras tanto puedes usar la biblioteca {fmt} , std::formatbasada en.

Descargo de responsabilidad : soy el autor de {fmt} y C++20 std::format.

vitaut avatar Jun 25 '2020 14:06 vitaut
cout.fill( '0' );    
cout.width( 3 );
cout << value;
lyricat avatar Nov 11 '2009 11:11 lyricat