포스트

정수(int), 실수(float)를 문자열로 변환하기

정수나 실수를 문자열로 변환하는 방법에는 여러가지가 있습니다.

가장 흔히 쓸 수 있는 std::to_string()부터 std::stringstream을 사용하는 방법, 그리고 안전하지 않지만 sprintf()를 사용하는 방법이 있습니다.

std::to_string()

std::to_string() 함수는 C++의 <string> 헤더에 정의되어 있는 함수로, 정수나 실수를 문자열로 변환해주는 함수입니다. 주어진 숫자 값을 해당 숫자를 나타내는 문자열로 변환하여 반환합니다.

이때, 숫자의 범위를 벗어나는 값은 inf 로 출력되며, 만약 변환하지 못하는 값에 대해서는 예외가 발생합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    int num1 = 123;
    float num2 = 3.141592;
    float num3 = 3e+39;
 
    string s1 = to_string(num1);
    string s2 = to_string(num2);
    string s3 = to_string(num3);
 
    cout << "num1: " << s1 << '\n';
    cout << "num2: " << s2 << '\n';
    cout << "num3: " << s3 << '\n';
}

결과: 숫자를 문자열로 변환한 결과

std::stringstream 클래스와 str()

std::stringstream 클래스를 사용하면, 문자열 스트림을 생성하고 입력, 출력 등의 작업을 수행할 수 있습니다.

해당 클래스는 <sstream> 헤더에 정의되어 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <sstream>
#include <string>
 
using namespace std;
 
int main()
{
    int num = 123;
    float fnum = 3.141592;
    string str;
    stringstream ss;
 
    ss << num;
    str = ss.str();
    cout << "num: " << str << '\n';
 
    ss.str("");
 
    ss << fnum;
    str = ss.str();
    cout << "fnum: " << str << '\n';
}

결과: 숫자를 stringstream으로 변환한 결과

sprinft(문자 변수, 서식, 숫자)

sprintf() 함수는 C 언어의 표준 라이브러리에 속하는 함수로, 문자열을 서식화된 형태로 만들어줍니다. 다른 말로 하면, 지정한 형식에 따라 변수의 값을 문자열로 변환하여 지정한 문자열에 저장하는 함수입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#define _CRT_SECURE_NO_WARNINGS // sprintf 보안 경고로 인한 컴파일 에러 방지
#include <cstdio>
 
int main() {
    float num = 3.141592;
    char str[10];
 
    sprintf(str, "%f", num);
 
    printf("%s", str);
 
    return 0;
}

결과: 숫자를 sprintf로 변환한 결과

다만, 주의해야 할 점은 sprintf() 함수는 버퍼 오버플로우와 같은 보안 문제를 야기할 수 있다는 점입니다. 버퍼의 크기를 초과하여 데이터가 쓰여질 경우 예상치 못한 결과가 발생할 수 있습니다.

따라서 std::to_string() 함수를 이용하거나 std::stringstream 클래스를 사용하는 것을 추천합니다.

참조

문자열을 정수, 실수로 변환하기

이 기사는 저작권자의 CC BY-NC-ND 4.0 라이센스를 따릅니다.