トップC-Tips > 3桁毎にカンマを入れる

3桁毎にカンマを入れる[2013.01.27]
C言語プログラムで3桁毎にカンマを入れるプログラムを示す。

1.はじめに

Javaの場合、DecimalFormatクラスやNumberFormatクラスを使えば、 3桁毎にカンマを入れるのは簡単である。

しかし、C言語には printf関数の書式設定にも、3桁毎にカンマを入れる機能はない。

2.整数の3桁毎にカンマを入れるプログラム

次のinsComma関数では、引数は整数を文字列で表したものとする。 static char BUF[32]にカンマを含めた文字列をコピーしている。 結果の桁数が31桁以下であることを前提としている。

もし、元の領域にカンマを含めることができる余裕があるならば、 static変数を使わず、次のようにすることもできる。

中継用の文字列バッファを使わず、元の文字列にカンマを挿入する方法もある。 後ろにずらすため、memmove関数を使う必要がある。 基本的には、3文字ずつの移動であるから、memmove関数を使うより、 代入演算 num[j] = num[i] を数値の末尾から繰り返し使う方が効率がよいだろう。

最初に挿入するカンマの数を求める。これが、下3桁の数字の移動量となる。 3桁、後ろに移動すると、カンマを代入し、以後の数字の移動量を1だけ減らす。 これを移動量が0になるまで繰り返す。

プログラムを以下に示す。