【C++】数字を任意の桁で0埋めする方法

  • 2023年3月16日
  • 2023年3月17日
  • C言語

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;
}

参考