Mesoscopic Programming

タコさんプログラミング専門

Programming Tips #032:n桁区切り関数

なぜ printf() は数字を区切ってくれないのか?

ファイルサイズを表示するのに3桁区切りしたいなと思ってググったのですが、
C++ だとストリーム出力の方は対応してるらしいけど、
書式付文字列関数ではあいかわらずサポートされてないみたいなので自分で作りました。

最初は引数として整数を渡す形で作ったんですけど、
コーディングしてみたら文字列で渡した方がエレガントぽいので文字列にしました。
せっかく作ったので公開しておきます。

これだと数字以外の文字列も区切れるので良いんではないかと思います。
区切り桁数と区切り文字も指定できるし、それにコードが短いのもお気に入りです。

extern char * AddSeparator( char * text, int digits = 3, char ch = ',' );

char * AddSeparator( char * text, int digits, char ch )
{
    for ( int len = ( int ) strlen( text ), i = 0, size = 1; i < len - 1; size++ )
    {
        if ( ( ++i ) % digits == 0 )
        {
            memmove( & text[ len - i ] + 1, & text[ len - i ], ++size );

            text[ len - i ] = ch;
        }
    }

    return text;
}
解説

単純に渡された文字列の最後尾を1桁目とみなして、n桁ごとに区切り文字を追加するだけでやんす。

以上でやんす。