はかせのラボ

私の頭の中を書いていく雑記ブログです

C++ 指定桁で値を表示し足りない分は0で埋める ~文字列ストリーム~

あいさつ

どうも、はかせです。
よくゲームのスコアとかで桁数揃えるために足りない分
0で埋めるやつあるじゃないですか。今回はそれをします。
(1を8桁だったら00000001になるやつ)

実装

まずはコードです。

#include <sstream>
#include <iomanip>

//value = 流れてきた値 スコアとか 型はintとかfloatとか
std::wostringstream wos;
//8桁で足りない分は0埋めする
wos << std::setw(8) << std::setfill(_T('0')) << value;

極めて単純に文字列ストリームを使ってやってみました。

wostringstreamはwstringの文字列ストリームです。
このストリームに<<を使って値を流すことで目的の文字列を作ります。
ちなみに文字列ストリームは内部で状態管理もメモリ管理もしてくれるので
特別後始末をプログラマーがしなくていいので楽ちんです。
(どっかのタイミングで文字列ストリームのまとめとかやりたいですね)

setwっていうのは指定した分だけ文字のスペースをとります。
今回は8桁分スペースを確保しています。
(△ = 空白 △△△△△△△△)

setfillは空いているスペースを渡した文字で埋めます。
ここに0を渡すことで足りない桁分の0埋めをしています。
(△→0に 00000000)

そうして出来た0埋め文字列に値を加算します。
(値 = 53 00000053)
f:id:hakase0274:20190212222224p:plain

無事目的の0埋めができました。

あとがき

今回は値の0埋め表示でした。
この文字列ストリームを使ったやり方は、
標準ライブラリだけで実装できて使い方も割と直感的で気に入りました。
(言語にしても何にしても標準は正義)

それでは今回はこの辺でノシ