CAFE

C 프로그래밍

int 값을 천단위 ,(comma) 문자열로 변환

작성자별은빛나고|작성시간15.07.15|조회수1,606 목록 댓글 0

int num;


1,234,567,890  혹은 -1,234,567,890 으로 변환합니다.

또한 출력폭을 정할 수 있습니다.

|  1,234,567|  폭을 9로 정했을 때 좌측2칸은 빈칸으로 나옴


소스 파일 :

첨부파일 comma333.c

#include <stdio.h>
 
#define SIBEOK 1000000000
#define BAEKMAN 1000000
#define CHEON 1000
#define ILL 1
 
int abs_int(int *n)
{/* n is minus then return 1, not then return 0 */
    int sign;
 
    sign = ((*< 0)? 1 : 0);
    *= ((*< 0)? -*n : *n);
    
    return sign;
}
 
int check_width(int num, int width)
{/* too narrow return 1 not 0, no count null size */
    int sign, i;
//    int null_char = 1;
    
    sign = abs_int(&num);
    
    for (i = 1; num > 1; num /= 10, i++);
    i += ((i-1/ 3+ sign;
//    i += null_char;
 
    return (width < i)? 1 : 0;
}
 
int int2comma(char *str, int num, int width)
{/* on success return 0 , not return -1 */
    int sign, i;
    char num_str[15= "\0";
    char *ptr = num_str;
    
    if (check_width(num, width)) {
        sprintf(str, "narrow");
        return -1;
    }
    
    sign = abs_int(&num);
 
    sprintf(num_str,    "%02d,", (num - (num - ( num / SIBEOK) * SIBEOK  )) / SIBEOK);
    sprintf(num_str+3,    "%03d,", (num - num / SIBEOK * SIBEOK) / BAEKMAN);
    sprintf(num_str+7,    "%03d,", (num - num / BAEKMAN * BAEKMAN) / CHEON);
    sprintf(num_str+11,    "%03d", (num - num / CHEON * CHEON) / ILL);
 
    for (;*ptr == '0' || *ptr == ','; ptr++*ptr = ' ';
    if (sign == 1*(--ptr) = '-';
    ptr = num_str + 14 - width;
    for (i = 0; i < width; i++, ptr++) str[i] = *ptr;
    
    return 0;
}
 
main()
{
    char str[15= "\0";
    int num, width = sizeof(str) - 1;
 
    width = 14;
    
    printf("enter num : ");
    scanf("%d", &num);
 
    int2comma(str, num, width);
    printf("result = %s\n", str);
}
 
cs


아래는 필드폭은 주어지지 않고 천단위마다 컴마를 찍어줍니다.

#include <stdio.h>
#include <string.h>
 
void main()
{
    char a[100];
    int i, n, k, cnt;
 
    printf("숫자 입력 : ");
    gets(a);
 
    k = strlen(a);
    n = k % 3;
    cnt = 3 - n;
 
    for (i = 0; i < k; i++) {
        printf("%c",a[i]);
        cnt++;
        if (cnt % 3 == 0 && i != k-1printf(",");
    }
 
    printf("\n");
}
cs
<출처 : http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=244706863>


다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
맨위로

카페 검색

카페 검색어 입력폼