Réponses:
Avec ce qui suit,
#include <iomanip>
#include <iostream>
int main()
{
std::cout << std::setfill('0') << std::setw(5) << 25;
}
la sortie sera
00025
setfill
est défini ' '
par défaut sur le caractère espace ( ). setw
définit la largeur du champ à imprimer, et c'est tout.
Si vous souhaitez savoir comment formater les flux de sortie en général, j'ai écrit une réponse à une autre question, j'espère que cela sera utile: Formatage de la sortie de la console C ++.
<iostream>
et <iomanip>
en haut de votre fichier, et vous devrez écrire using namespace std;
, mais c'est une mauvaise pratique, alors vous devriez peut-être plutôt préfixer les trois identificateurs de cette réponse std::
.
Une autre façon d'y parvenir est d'utiliser l'ancienne printf()
fonction du langage C
Vous pouvez l'utiliser comme
int dd = 1, mm = 9, yy = 1;
printf("%02d - %02d - %04d", mm, dd, yy);
Cela s'imprimera 09 - 01 - 0001
sur la console.
Vous pouvez également utiliser une autre fonction sprintf()
pour écrire une sortie formatée dans une chaîne comme ci-dessous:
int dd = 1, mm = 9, yy = 1;
char s[25];
sprintf(s, "%02d - %02d - %04d", mm, dd, yy);
cout << s;
N'oubliez pas d'inclure le stdio.h
fichier d'en - tête dans votre programme pour ces deux fonctions
Vous pouvez remplir un espace vide soit par 0, soit par un autre caractère (pas un nombre).
Si vous écrivez quelque chose comme un %24d
spécificateur de format, cela ne remplira pas 2
les espaces vides. Cela définira le pad sur 24
et remplira les espaces vides.
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
Cela produit la sortie:
-12345
****-12345
-12345****
****-12345
-****12345
cout.fill( '0' );
cout.width( 3 );
cout << value;
char* or char[]
) pour ne pas console directement. En fait, j'écris une fonction qui renvoie une chaîne formatée
std::stringstream
.
sprintf(s, "%02d-%02d-%04d", dd, mm, yy);
où s
est char*
et dd, mm, yy
sont de int
type. Cela écrira le 02-02-1999
format en fonction des valeurs des variables.
J'utiliserais la fonction suivante. Je n'aime pas sprintf
; il ne fait pas ce que je veux !!
#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;
}
Un autre exemple pour afficher la date et l'heure en utilisant zéro comme caractère de remplissage sur les instances de valeurs à un chiffre: 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;
}
char* or char[]
) pour ne pas console directement. En fait, j'écris une fonction qui renvoie une chaîne formatée