C++には他の言語にあるような0埋め関数やライブラリがないため、数字から任意の桁数で0埋めした文字列を得るためには少々プログラムを書く必要がある。ここでは、以下の様な条件が与えられル場合の0埋め手法を示す。
数字\(A, N\)が与えられる。\(A\)が10進数表示で\(N\)桁未満であるとき、\(N\)桁になるよう0埋めを行う。\(A\)が既に\(N\)桁以上である場合は何もしない。
Case1: to_string関数と文字数により0埋め
#include <iostream> // std::cin, std::cout
#include <string> // std::string
#include <algorithm> // std::max
int main()
{
int A, N;
std::cin >> A >> N;
// Aを文字列に変換
std::string S = std::to_string(A);
// SをN桁で0埋めする
S = std::string(std::max(0, N-(int)S.size()), '0') + S;
std::cout << S << std::endl;
return 0;
}
Case2: stringstream型を使う
#include <iostream> // std::cin, std::cout
#include <iomanip> // std::setw(int), std::setfill(char)
#include <string> // std::string
#include <sstream> // std::stringstream
int main()
{
int A, N;
std::cin >> A >> N;
std::stringstream ss;
// 現在の書式フラグを保存しておく
std::ios::fmtflags prevFlags = std::cout.flags();
// N桁で0埋めしたAをssに出力
ss << std::setw(N) << std::setfill('0') << A;
// stringstream ss を文字列Sとする
std::string S = ss.str();
std::cout << S << std::endl;
// 書式フラグの復元
std::cout.flags(prevFlags);
return 0;
}