Вывести лидирующие нули с помощью оператора вывода 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;

от:

http://www.fredosaurus.com/notes-cpp/io/omanipulators.html

Или же,

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;
 }
Другие вопросы по тегам