Coding & Programming/C, C++

[C/C++] 정수(int)와 문자열(string) 상호 변환하기(itoa, atoi, sprintf, snprintf function examples)

mainCodes 2021. 4. 8. 10:17

안녕하세요 JollyTree(•̀ᴗ•́)و입니다. 

 

정수와 문자열을 서로 변경하는 방법에 대해 정리하려고 합니다. 자료형 간의 변환은 코딩시 많이 사용되는 경우로 이번 자료에서는 itoa, atoi, sprintf 함수 사용 예제 위주로 설명하고 snprintf()를 사용한 응용 예제를 공유합니다.

 

인터넷에 함수 원형(Prototype)을 설명한 자료들은 많기에 예제위주로 설명을 하려합니다. 예제를 보고 편리한 방법을 사용하면 되겠습니다.

 

정수(int)와 문자열(string) 상호 변환 예제(Example) - itoa, atoi, sprintf, snprintf  함수

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int main()
{
    /***
       1.itoa()함수 이용: 정수(int)를 입력 받아 문자열 배열로 변환하기
    ***/
    {
        int a;
        char buffer[20];
        printf("\n\n----------------------------------\n");
        printf("문자열로 변경할 정수를 입력하세요: ");
        scanf("%d"&a);
 
        //(참고) itoa 함수명은 더 이상 사용하지 않으므로 ISO C/C++ 표준인 _itoa 함수명을 사용
        _itoa(a, buffer, 10);  //10 진수로 변환
        printf("정수를 10진수 문자열로 변환한 결과 = %s\n", buffer);
 
        _itoa(a, buffer, 16);  //16 진수로 변환
        printf("정수를 16진수 문자열로 변환한 결과 = %s\n", buffer);
 
        _itoa(a, buffer, 2);   //2 진수로 변환
        printf("정수를 2진수 문자열로 변환한 결과 = %s\n", buffer);
    }
 
    /***
      2.atoi()함수 이용: 문자열 배열을 입력받아 정수(int) 변환하기
    ***/
    {
        char buffer[20];
        int a;
 
        printf("\n\n----------------------------------\n");
        printf("정수로 변경할 문자열을 입력하세요: ");
        scanf("%s", buffer);
 
        a = atoi(buffer);   //문자열을 정수로 변환
        printf("문자열을 10진수 정수로 변환한 결과 = %d\n", a);
    }
 
    /***
      3.sprintf()를 이용한 다양한 자료형을 문자열 변환하여 출력하기
    ***/
    {
        int a = 1538;
        char c = 'a';
        double d = 7.1358;
        int *= &a;
        char buffer[20];
 
        printf("\n\n----------------------------------\n");
        sprintf(buffer, "%d", a);
        printf("정수를 문자열로 변환 = %s\n", buffer);
 
        sprintf(buffer, "%x", a);
        printf("정수를 16진수 문자열로 변환 = %s\n", buffer);
 
        sprintf(buffer, "%c", c);
        printf("문자를 문자열로 변환 = %s\n", buffer);
 
        sprintf(buffer, "%f", d);
        printf("실수를 문자열로 변환= %s\n", buffer);
 
        sprintf(buffer, "%p", p);
        printf("정수 a의 주소를 문자열로 변환: %s\n", buffer);
    }
 
    /***
      4.응용 : 시간을 입력 받아 두 시간의 시간차 구하기
        나중에 입력한 시간이 더 늦은 시간이어야 함
        입력예시)
          102153
          211523
 
        출력예시)
          10:53:30
    ***/
    {
        char time1[7];
        char tmp[4];
 
        int hour, min, sec;
        int tot_sec1, tot_sec2, tot_sec3;
 
        printf("\n\n----------------------------------\n");
        for (int i = 0; i < 2; i++)
        {
            printf("%d번째 시간을 시분초(hhmmss) 형태로 입력하세요: ", i+1);
            scanf("%s", time1);
 
            snprintf(tmp, 3"%s", time1);
            hour = atoi(tmp);
 
            snprintf(tmp, 3, time1+2);
            min = atoi(tmp);
 
            snprintf(tmp, 3, time1+4);
            sec = atoi(tmp);
 
            if(i == 0)
                tot_sec1 = (hour * 3600+ (min * 60+ sec;
            else
                tot_sec2 = (hour * 3600+ (min * 60+ sec;
        }
 
        tot_sec3 = tot_sec2 - tot_sec1;
 
        min = tot_sec3 / 60;
        hour = min / 60;
        min = min % 60;
        sec = tot_sec3 % 60;
 
        printf("시간 차는 %02d:%02d:%02d 입니다.\n", hour, min, sec);
    }
 
}
cs

/***
1. itoa()함수 이용: 정수(int)를 입력 받아 문자열 배열로 변환하기
***/

문자열로 변경할 정수(int)를 입력받아 _itoa()함수를 이용한 10진수, 16진수, 2진수 형태로 변환하여 출력합니다.  인터넷에 많은 예제가 itoa()함수로 되어 있는데 ISO C/C++ 표준이 _itoa로 함수명이 변경되었습니다. 만약 예전의 itoa()함수를 사용하고자 한다면 소스코드 상단에 #pragma warning(disable:4996)를 선언해 주세요.

 

/***
2. atoi()함수 이용: 문자열 배열을 입력받아 정수(int) 변환하기
***/

문자열을 정수로 변경하는 함수에는 atoi()함수가 있습니다.  함수도 원형도 1개의 입력 버퍼 파라미터만을 가지고 있어 사용 방법이 단순합니다.

 

/***
3.sprintf() 함수를 이용한 다양한 자료형을 문자열 변환하여 출력하기
***/

예제는 sprintf()함수를 이용하여 정수를 문자열로 변환, 정수를 16진수 문자열로 변환, 실수를 문자열로 변환 등 다양한 형태로 사용됩니다.

 

/***
4.응용 : 시간을 입력 받아 두 시간의 시간차 구하기(snprintf, atoi 함수 이용)

***/

예제는 2개의 시간을 입력 받고 나중에 입력한 시간에서 처음 입력한 시간을 빼고 시간차를 구하는 예제입니다.

 

        입력예시)
          102153
          211523

        출력예시)
          시간 차는 10:53:30 입니다.

 

실행결과(Output):

 

 

이상 JollyTree 였습니다. 꾸벅. (•̀ᴗ•́)و