Wie kann ich ein int mit führenden Nullen auffüllen, wenn ich den Operator cout

Lesezeit: 1 Minute

Wie kann ich ein int mit fuhrenden Nullen auffullen wenn
Jamie Q

ich will cout um einen int mit führenden Nullen auszugeben, also den Wert 1 würde gedruckt werden als 001 und der Wert 25 gedruckt als 025. Wie kann ich das machen?

Wie kann ich ein int mit fuhrenden Nullen auffullen wenn
Khaled Alshaya

Mit den folgenden,

#include <iomanip>
#include <iostream>

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

die Ausgabe wird sein

00025

setfill auf das Leerzeichen (' ') standardmäßig. setw legt die Breite des zu druckenden Feldes fest, und das war’s.


Wenn Sie wissen möchten, wie Ausgabeströme im Allgemeinen formatiert werden, habe ich eine Antwort auf eine andere Frage geschrieben, ich hoffe, sie ist nützlich: Formatieren der C++-Konsolenausgabe.

  • aber .. wie kann ich eine formatierte Ausgabe in eine Zeichenfolge schreiben (char* or char[]) nicht direkt zu trösten. Eigentlich schreibe ich eine Funktion, die eine formatierte Zeichenfolge zurückgibt

    – Schaschwatt

    23. Dezember 2012 um 9:32 Uhr

  • @harsh verwende std::stringstream

    – Cheshirekow

    30. April 2013 um 14:51 Uhr

  • Vergessen Sie nicht, das Stream-Format danach wiederherzustellen, sonst erleben Sie später eine böse Überraschung.

    – Code-Abominator

    15. April 2015 um 0:03 Uhr

  • Diese Antwort wies mich in die richtige Richtung, aber sie könnte verbessert werden. Um diesen Code tatsächlich zu verwenden, müssen Sie ihn einschließen <iostream> und <iomanip> oben in Ihrer Datei, und Sie müssen schreiben using namespace std;aber das ist eine schlechte Praxis, also sollten Sie stattdessen den drei Bezeichnern in dieser Antwort voranstellen std::.

    – David Grayson

    6. Juli 2015 um 17:44 Uhr


  • @shashwat Sie können folgenden Code verwenden – std::stringstream filename; Dateiname.fill(‘0’); Dateiname.Breite(5); Dateiname<

    – Prinz Patel

    25. Februar 2019 um 16:14 Uhr

1646967007 655 Wie kann ich ein int mit fuhrenden Nullen auffullen wenn
Schaschwatt

Eine andere Möglichkeit, dies zu erreichen, ist die Verwendung von old printf() Funktion der C-Sprache

Sie können dies gerne verwenden

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

Dies wird gedruckt 09 - 01 - 0001 auf der Konsole.

Sie können auch eine andere Funktion verwenden sprintf() formatierte Ausgabe in eine Zeichenfolge wie unten schreiben:

int dd = 1, mm = 9, yy = 1;
char s[25];
sprintf(s, "%02d - %02d - %04d", mm, dd, yy);
cout << s;

Einschließen nicht vergessen stdio.h Header-Datei in Ihrem Programm für diese beiden Funktionen

Zu beachten:

Sie können Leerzeichen entweder mit 0 oder mit einem anderen Zeichen (keine Zahl) füllen.
Wenn du sowas schreibst %24d Formatbezeichner als dieser wird nicht ausgefüllt 2 in Leerzeichen. Dadurch wird das Pad auf eingestellt 24 und wird Leerstellen füllen.

  • Ich weiß, dass dies eine alte Antwort ist, aber es sollte dennoch darauf hingewiesen werden, dass sprintf im Allgemeinen nicht zu sehr vertraut werden sollte, da Sie die Länge des Puffers, in den es schreiben soll, nicht angeben können. Die Verwendung von snprintf ist tendenziell sicherer. Die Verwendung von Streams im Gegensatz zu *printf() ist auch viel typsicherer, da der Compiler die Möglichkeit hat, die Parametertypen zur Kompilierzeit zu überprüfen; Die akzeptierte Antwort von AraK ist sowohl typsicher als auch „Standard“-C++ und verlässt sich nicht auf Header, die den globalen Namespace vergiften.

    – Magnus

    5. Februar 2014 um 14:19 Uhr

  • Die Antwort verwendet als Beispiel die Datumsformatierung. Beachten Sie jedoch, dass es als Beispiel ein exotisches Zeitformat verwendet, obwohl es auf der Oberfläche ISO_8601 ähnelt (de.wikipedia.org/wiki/ISO_8601).

    – Varepsilon

    15. April 2019 um 12:04 Uhr

  • “Sie können Leerzeichen entweder mit 0 oder mit einem anderen Zeichen (keine Zahl) füllen.” Scheint, als ob es nur mit Null funktioniert: ideone.com/vkwKxR. Können Sie ein Beispiel geben, wie man andere Zeichen verwendet?

    – Qwertiy

    25. Oktober 2021 um 9:46 Uhr

1646967008 802 Wie kann ich ein int mit fuhrenden Nullen auffullen wenn
quest333

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

Dies erzeugt die Ausgabe:

-12345
****-12345
-12345****
****-12345
-****12345

1646967008 500 Wie kann ich ein int mit fuhrenden Nullen auffullen wenn
vitaut

In C++20 können Sie Folgendes tun:

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

In der Zwischenzeit können Sie verwenden die {fmt}-Bibliothek, std::format basiert auf.

Haftungsausschluss: Ich bin der Autor von {fmt} und C++20 std::format.

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

  • aber .. wie kann ich eine formatierte Ausgabe in eine Zeichenfolge schreiben (char* or char[]) nicht direkt zu trösten. Eigentlich schreibe ich eine Funktion, die eine formatierte Zeichenfolge zurückgibt

    – Schaschwatt

    23. Dezember 2012 um 9:33 Uhr

  • @Shashwat Tripathi Verwenden std::stringstream.

    – Khaled Alshaya

    23. Dezember 2012 um 10:19 Uhr

  • @AraK Ich denke, das würde in Turbo C++ nicht funktionieren. Ich habe es mit verwendet sprintf(s, "%02d-%02d-%04d", dd, mm, yy); wo s ist char* und dd, mm, yy sind aus int Art. Dies wird schreiben 02-02-1999 Format entsprechend den Werten in Variablen.

    – Schaschwatt

    23. Dezember 2012 um 12:44 Uhr

1646967008 498 Wie kann ich ein int mit fuhrenden Nullen auffullen wenn
Peter Mortensen

Ein weiteres Beispiel für die Ausgabe von Datum und Uhrzeit mit Null als Füllzeichen bei Instanzen von einstelligen Werten: 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;
}

  • aber .. wie kann ich eine formatierte Ausgabe in eine Zeichenfolge schreiben (char* or char[]) nicht direkt zu trösten. Eigentlich schreibe ich eine Funktion, die eine formatierte Zeichenfolge zurückgibt

    – Schaschwatt

    23. Dezember 2012 um 9:33 Uhr

  • @Shashwat Tripathi Verwenden std::stringstream.

    – Khaled Alshaya

    23. Dezember 2012 um 10:19 Uhr

  • @AraK Ich denke, das würde in Turbo C++ nicht funktionieren. Ich habe es mit verwendet sprintf(s, "%02d-%02d-%04d", dd, mm, yy); wo s ist char* und dd, mm, yy sind aus int Art. Dies wird schreiben 02-02-1999 Format entsprechend den Werten in Variablen.

    – Schaschwatt

    23. Dezember 2012 um 12:44 Uhr

1646967008 498 Wie kann ich ein int mit fuhrenden Nullen auffullen wenn
Peter Mortensen

Ich würde folgende Funktion verwenden. Ich mag nicht sprintf; es macht nicht was ich will!!

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

989660cookie-checkWie kann ich ein int mit führenden Nullen auffüllen, wenn ich den Operator cout

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy