Вывести лидирующие нули с помощью оператора вывода C++?
Как я могу отформатировать вывод в C++? Другими словами, что такое C++ эквивалентно использованию printf
как это:
printf("%05d", zipCode);
Я знаю, я мог бы просто использовать printf
в C++, но я бы предпочел оператор вывода <<
,
Вы бы просто использовали следующее?
std::cout << "ZIP code: " << sprintf("%05d", zipCode) << std::endl;
6 ответов
Решение
Это сделает свое дело:
#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)
устанавливает выравнивание, где выравнивание - это ios::left или ios::right.
В C++20 вы сможете:
std::cout<< std:: format ("{: 05}", zipCode);
Используйте вызовы setw и setfill:
std::cout << std::setw(5) << std::setfill('0') << zipCode << std::endl;
cout << setw(4) << setfill('0') << n << endl;
от:
Или же,
char t[32];
sprintf_s(t, "%05d", 1);
выведет 00001, как ОП уже хотел сделать
Простой ответ, но он работает!
ostream &operator<<(ostream &os, const Clock &c){
// format the output - if single digit, then needs to be padded with a 0
int hours = c.getHour();
// if hour is 1 digit, then pad with a 0, otherwise just print the hour
(hours < 10) ? os << '0' << hours : os << hours;
return os; // return the stream
}
Я использую тернарный оператор, но его можно перевести в оператор if/else следующим образом.
if(c.hour < 10){
os << '0' << hours;
}
else{
os << hours;
}