rellenar izquierda con ceros agregar c++ formatting cout

c++ - izquierda - ¿Cómo puedo rellenar un int con ceros iniciales cuando uso el operador cout<<?



agregar ceros a la izquierda c++ (6)

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


Otra forma de lograr esto es usando la printf() antigua del lenguaje C

Puedes usar esto como

int dd = 1, mm = 9, yy = 1; printf("%02d - %02d - %04d", mm, dd, yy);

Esto imprimirá 09 - 01 - 0001 en la consola.

También puede usar otra función sprintf() para escribir una 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 el stdio.h encabezado stdio.h en su programa para estas dos funciones

Lo que hay que señalar:

Puede llenar el espacio en blanco por 0 o por otro char (no número).
Si escribe algo como el especificador de formato %24d , esto no llenará 2 en espacios en blanco. Esto establecerá el pad en 24 y llenará los espacios en blanco.


Otro ejemplo para generar la fecha y la hora utilizando cero como carácter de relleno en instancias de valores de un solo dígito: 2017-06-04 18:13:02

#include "stdafx.h" #include <iostream> #include <iomanip> #include <ctime> using namespace std; int main() { time_t t = time(0); // Get time now struct tm * now = localtime(&t); cout.fill(''0''); cout << (now->tm_year + 1900) << ''-'' << setw(2) << (now->tm_mon + 1) << ''-'' << setw(2) << now->tm_mday << '' '' << setw(2) << now->tm_hour << '':'' << setw(2) << now->tm_min << '':'' << setw(2) << now->tm_sec << endl; return 0; }


Primero incluye <iomanip> , luego:

cout << setfill(''0'') << setw(5) << 25; output: 00025

setfill se establece en el space '' '' de forma predeterminada. setw establece el ancho del campo a imprimir, y eso es todo.

Si está interesado en saber cómo formatear las secuencias de salida en general, escribí una respuesta para otra pregunta, espero que sea útil: Formatear la salida de la consola de C ++.


Yo usaría la siguiente función. No me gusta el sprintf ; no hace lo que quiero !!

#define hexchar(x) ((((x)&0x0F)>9)?((x)+''A''-10):((x)+''0'')) typedef signed long long Int64; // Special printf for numbers only // See formatting information below. // // Print the number "n" in the given "base" // using exactly "numDigits". // Print +/- if signed flag "isSigned" is TRUE. // Use the character specified in "padchar" to pad extra characters. // // Examples: // sprintfNum(pszBuffer, 6, 10, 6, TRUE, '' '', 1234); --> " +1234" // sprintfNum(pszBuffer, 6, 10, 6, FALSE, ''0'', 1234); --> "001234" // sprintfNum(pszBuffer, 6, 16, 6, FALSE, ''.'', 0x5AA5); --> "..5AA5" void sprintfNum(char *pszBuffer, int size, char base, char numDigits, char isSigned, char padchar, Int64 n) { char *ptr = pszBuffer; if (!pszBuffer) { return; } char *p, buf[32]; unsigned long long x; unsigned char count; // Prepare negative number if (isSigned && (n < 0)) { x = -n; } else { x = n; } // Set up small string buffer count = (numDigits-1) - (isSigned?1:0); p = buf + sizeof (buf); *--p = ''/0''; // Force calculation of first digit // (to prevent zero from not printing at all!!!) *--p = (char)hexchar(x%base); x = x / base; // Calculate remaining digits while(count--) { if(x != 0) { // Calculate next digit *--p = (char)hexchar(x%base); x /= base; } else { // No more digits left, pad out to desired length *--p = padchar; } } // Apply signed notation if requested if (isSigned) { if (n < 0) { *--p = ''-''; } else if (n > 0) { *--p = ''+''; } else { *--p = '' ''; } } // Print the string right-justified count = numDigits; while (count--) { *ptr++ = *p++; } return; }


cout.fill( ''0'' ); cout.width( 3 ); cout << value;


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