数値を右詰めで0埋めな文字列に変換してみる。

ソースコード。


#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <sstream>
 
int main() {
 
  int data = 1234;
  int keta = 8;
 
  // C的なコード
  char *ch = (char*)malloc(sizeof(char) * (keta + 1));
  if(ch){
    //sprintf(ch, "%08d", data); // 桁数を動的に指定できない・・・
    sprintf(ch, "%0*d", keta, data); // 桁数を動的に指定できた\(^o^)/
    printf("%s¥n", ch);
    free(ch);
  }
 
  // C++的なコード
  std::ostringstream oss;
  oss.setf(std::ios::right); // 右詰め
  oss.fill('0'); // 0埋め
  oss.width(keta); // 桁数
  oss << data;
  std::string str = oss.str();
  std::cout << str << std::endl;
 
  return 0;
}

出力結果。


00001234
00001234

Ref.
- C/C++とJava(第16章) ← 書式制御フラッグや右寄せ左寄せ埋める文字を指定する方法などの参考に。
- ostringstream - C++ Reference
- ostream - C++ Reference

追記: 2011-12-29
はてブのコメントでツッコミをいただいたので、


sprintf(ch, "%0*d", keta, data); // 桁数を動的に指定できた\(^o^)/

を追加。
「*」を使うと「桁数・精度や引数番号の指定を引数から取ってくる」ことができる。
参考: C言語の基礎知識(?)メモ(Hishidama's C Memo)

tags: c++

Posted by NI-Lab. (@nilab)