入力された整数を、必ず「指定桁数」で先頭ゼロ埋めして出力するコードの書き方を丁寧に解説します。
✅ 使用例
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int n;
cin >> n;
cout << setfill('0') << setw(5) << n << endl;
return 0;
}
setw(5)
で出力フィールド幅を5桁に設定setfill('0')
により不足桁があれば '0' で埋める- 上記コードで
42
を入力すると00042
と出力されます。
✳️ なぜ setw
と setfill
を使うのか?
<iomanip>
に含まれるストリームマニピュレータとして標準的に利用可能setw()
は次の出力操作1回にのみ適用されるため、制御が明確setfill()
はその後の出力にも「デフォルトの埋め文字」として有効です。
🧪 コード例集と用途別使い方
パターン1:標準入力からゼロ埋めして出力
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
int n;
cin >> n;
cout << setfill('0') << setw(5) << n << endl;
return 0;
}
- 入力値が
7
→ 出力00007
12345
→12345
(幅に満たない桁のみ埋める)
パターン2:同じ文字列・複数回出力にも応用
cout << setfill('*') << setw(10) << 77 << endl;
結果: ********77
のように、*
で埋まった10文字のフィールド幅に対して 77
を右詰め出力できます。
パターン3:関数でゼロ埋め文字列生成(文字列操作)
string pad(unsigned digits, unsigned long num) {
string s = to_string(num);
if (s.length() >= digits) return s;
return string(digits - s.length(), '0') + s;
}
ストリーム形式を使わずに文字列操作だけでゼロ埋めしたい場合に使えます。
このような実装がより高速であることも報告例もあります。
🚀 C++20以降なら std::format
も選択肢に
C++20以降では、std::format
(Python風フォーマット)で同じことがより直感的に書けます:
#include <format>
#include <iostream>
int main() {
int n = 42;
std::cout << std::format("{:05}", n) << std::endl;
return 0;
}
この例では { :05 }
が「5桁ゼロ埋め」の指定です。printfに近い感覚で書けて型安全なのが特長です。
🏁 まとめ
<iomanip>
のsetw
とsetfill
を使えば、安全確実にゼロ埋め出力が可能- 簡潔で移植性が高く、標準C++として信頼性あり
- C++20以降は
std::format
も利用可能で、より表現力豊かな書き方ができる