Это поможет, по крайней мере, для неотрицательных чисел (a) , таких как почтовые индексы (b) , упомянутые в вашем вопросе.
#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;
Наиболее распространенные манипуляторы ввода-вывода, управляющие заполнением:
std::setw(width)
устанавливает ширину поля.
std::setfill(fillchar)
устанавливает символ заполнения.
std::setiosflags(align)
устанавливает выравнивание, где align это ios :: left или ios :: right.
И если вы предпочитаете использовать <<
, я настоятельно рекомендую вам заглянуть в библиотеку fmt
. Это было отличным дополнением к нашему набору инструментов для форматирования и намного лучше, чем потоковые конвейеры с большой длиной, что позволяет вам делать такие вещи, как:
cout << fmt::format("{:05d}", zipCode);
И в настоящее время LEWG также нацелена на C ++ 20, а это означает, что, надеюсь, он станет базовой частью языка в этот момент (или почти наверняка позже, если он не совсем проникнет).
(a) Если вам нужно обрабатывать отрицательные числа, вы можете использовать std::internal
следующим образом:
cout << internal << setw(5) << setfill('0') << zipCode << endl;
Помещает символ заполнения между знаком и величиной.
(b) Это («все почтовые индексы неотрицательны») является предположением с моей стороны, но достаточно безопасным, я бы гарантировал: -)