C 언어에서 int 타입으로 선언된 변수를 string 으로 변환하는 것은 엄청나게 쉽다..
sprintf( str, "%s", number );
이거 한 줄로 해결된다..
그런데,, 3자리 마다 comma (,) 를 찍어 달라고 요구 한다면,, 내가 아는 한,, C 표준 라이브러리에는 없고,, 새로 짜야 한다..
새로 짠다고 해도,, 20 줄 남짓의 코딩으로 가볍게 해결된다..
하지만,, 다음과 같은 조건을 만족해야 한다면 좀 고민을 해야 한다.
printf("%d %d %d %d\n", num1, num2, num3, num4);
이렇게 찍던거를
printf("%s %s %s %s\n", func(num1), func(num2), func(num3), func(num4));이렇게 간단히 바꿔서 쓰고 싶다면,, 그리 간단하지만은 않다.
이걸 고민하다가,,
func() 내부에 static array 를 만들어 쓰면 된다는 조언을 받았다..
- 이쁜왕자 -
- Valken the SEXy THief~~ ^_* -
char* IntegerToCommaString(int number)
{
#define MAX_BUFFER_SIZE 10
#define MAX_STRING_SIZE 100
static char buf[MAX_BUFFER_SIZE][MAX_STRING_SIZE];
static int cnt = 0;
int sign = 0;
int pos = 0;
int i;
char chr;
/* sign */
if (number < 0)
{
number = -number;
sign = 1;
}
cnt = (cnt + 1) % MAX_BUFFER_SIZE;
/* special case : number == 0 */
if (number == 0)
{
buf[cnt][0] = '0';
buf[cnt][1] = '\0';
return buf[cnt];
}
/* create string */
while (number > 0)
{
buf[cnt][pos++] = '0' + number % 10;
number /= 10;
if ((pos % 4 == 3) && (number > 0))
buf[cnt][pos++] = ',';
}
if (sign == 1)
buf[cnt][pos++] = '-';
/* reverse string */
for (i=0;i < pos/2;i++)
{
chr = buf[cnt][i];
buf[cnt][i] = buf[cnt][pos-i-1];
buf[cnt][pos-i-1] = chr;
}
buf[cnt][pos] = '\0';
return buf[cnt];
}