数字を3桁ごとにカンマ付文字列に変換する
Posted: 2007年11月02日(金) 15:44
数字を、文字列の変換するために sprintf関数でできることは知っていますが、文字列内に3桁毎にカンマを付加しなくてはならなくなりました。(マイナス記号も表示できるようにする)
sprintf関数の拡張機能で、お手軽にできる機能ってご存知ありませんでしょうか?
sprintf関数の拡張機能で、お手軽にできる機能ってご存知ありませんでしょうか?
ほんのちょっとした例です。
#include <stdio.h>
void addComma(int num, int mod, int d)
{
int m = num / 10, n = num % 10;
if (num == 0 && d != 0)
return;
addComma(m, n, d + 1);
printf("%d%s", m == 0 ? n : n < 0 ? -n : n, d && d % 3 == 0 ? "," : "");
}
int main(void)
{
int i;
for (i = -100000; i <= 100000; i += 100)
addComma(i, 0, 0), putchar('\n');
return 0;
}#include <stdio.h>
#define LEN_MAX 32
void addComma(int n)
{
int p = n / 1000, q = n % 1000;
if(!p){
printf("%d", n);
return;
}
addComma(p);
printf(",%03d", q < 0 ? -q : q);
return;
}
char *saddComma(char *s, int n, size_t l)
{
int p = n / 1000, q = n % 1000;
if(!p){
size_t i;
for(i = 0; n /= 10; i++) ;
i += 1 + (q < 0);
if(l <= i) return NULL;
sprintf(s, "%d", q);
return s + i;
}
if(!(s = saddComma(s, p, l - 4))) return NULL;
sprintf(s, ",%03d", q < 0 ? -q : q);
return s + 4;
}
int main(void)
{
int n;
char s[LEN_MAX];
scanf("%d", &n);
addComma(n);
putchar('\n');
if(!saddComma(s, n, LEN_MAX)) puts("Area is not enough.");
else puts(s);
return 0;
}