【C言語】sprintf関数でゼロ埋めを行う方法「左詰め・右詰め」

C/C++

sprintf関数は文字列をフォーマットする際、数値をゼロ埋めできるフラグが用意されています。

そのフラグを指定すれば、「123」を「000123」にすることができますし、左詰め・右詰めをすることもできます。

やりかたはとてもカンタンなので、どのようにフラグを指定するのか見ていきましょう。


ゼロ埋めする方法

sprintf関数でゼロ埋めするにはフラグとして0とフィールド幅を指定します。

#include <stdio.h>

int main()
{
  long a = 5;;
  sprintf("[%04d]", a);
}
[0005]

上記サンプルでは、数値の部分が4文字分となるように、ゼロ埋めを行なっています。

ゼロ埋めする必要がない場合(フィールド幅より桁数が大きい場合)は、ゼロ埋めされずにそのまま出力されます。

#include <stdio.h>

int main()
{
  long a = 12345;;
  sprintf("[%04d]", a);
}
[12345]

わざわざif文やfor文でゼロ埋めする処理を書かなくても、sprintf関数を使えば1行で済むことなので、覚えておくといざという時に便利です。

左詰め・右詰めする方法

おまけですが、ゼロ埋めではなく左詰め(左寄せ)・右詰め(右寄せ)する方法も見ていきましょう。

左詰めしたい場合は0フラグを与えずに、フィールド幅だけを与えます。

#include <stdio.h>

int main()
{
  long a = 5;
  printf("[%4d]", a);
}
[   5]

 

上記サンプルは6文字分になるように、足りない字数をスペースで補っています。

右詰めしたい場合は、フィールド幅の数値の前にを指定子てください。

#include <stdio.h>

int main()
{
  long a = 5;
  sprintf("[%-4d]", a);
}
[5   ]

これで右詰めすることができます。

ゼロ埋め・右詰めの組み合わせはできない

ゼロ埋めしながら右詰めするといったことはsprintf関数ではできません。

ですので、数値を10倍するなりして桁数を増やしたものを使うようにしてください。

Acceliv