Zumindest für nicht-negative Zahlen funktioniert das so (a) wie zum Beispiel die Postleitzahlen (b) die Sie in Ihrer Frage erwähnt haben.
#include <iostream>
#include <iomanip>
using namespace std;
cout << setw(5) << setfill('0') << zipCode << endl;
// or use this if you don't like 'using namespace std;'
std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl;
Die gebräuchlichsten IO-Manipulatoren, die das Auffüllen kontrollieren, sind:
std::setw(width)
legt die Breite des Feldes fest.
std::setfill(fillchar)
setzt das Füllzeichen.
std::setiosflags(align)
legt die Ausrichtung fest, wobei align für ios::left oder ios::right steht.
Und nur über Ihre Vorliebe für die Verwendung von <<
würde ich Ihnen dringend empfehlen, sich mit dem fmt
Bibliothek (siehe https://github.com/fmtlib/fmt ). Dies ist eine großartige Ergänzung zu unserem Toolkit für die Formatierung von Material und ist viel schöner als massiv Länge Stream-Pipelines, so dass Sie Dinge wie tun können:
cout << fmt::format("{:05d}", zipCode);
Und es wird derzeit von der LEWG auch auf C++20 ausgerichtet, was bedeutet, dass es hoffentlich zu diesem Zeitpunkt ein Grundbestandteil der Sprache sein wird (oder fast sicher später, wenn es sich nicht ganz einschleicht).
(a) Wenn Sie tun mit negativen Zahlen umgehen müssen, können Sie std::internal
wie folgt:
cout << internal << setw(5) << setfill('0') << zipCode << endl;
Dadurch wird das Füllzeichen zwischen das Vorzeichen und den Betrag.
(b) Dies ("alle Postleitzahlen sind nicht-negativ") ist eine Annahme meinerseits, aber eine ziemlich sichere, würde ich garantieren :-)