이 글에서는 C/C++에서 문자열(string)을 숫자(number)로 변환하는 방법에 대해 자세히 알아보겠습니다.
C/C++에서는 문자열을 숫자로 변환할 때 크게 두 가지 방법을 사용할 수 있습니다. 하나는 C 스타일 함수인 sscanf()이고, 다른 하나는 C++11에서 도입된 stoi()입니다.
1. sscanf() 함수 사용하기
sscanf()는 <stdio.h> 헤더에 정의된 함수로, 형식 지정자(%d, %f 등)를 활용해 문자열에서 원하는 타입의 값을 추출할 수 있습니다. C와 C++ 양쪽에서 모두 동작한다는 장점이 있습니다.
예제 코드
#include<stdio.h>
int main(){
const char *str = "12345";
int x;
sscanf(str, "%d", &x);
printf("\nThe value of x : %d", x);
return 0;
}
실행 결과
The value of x : 12345
위 예제에서는 문자열 "12345"를 %d 형식 지정자를 통해 정수형 변수 x에 저장했습니다. 실무에서는 sscanf()의 반환값(성공적으로 읽은 항목 수)을 확인하여 변환이 제대로 되었는지 검사하는 것이 좋습니다.
2. stoi() 함수 사용하기
stoi()(string to integer)는 C++11부터 표준 라이브러리에 포함된 함수로, std::string 객체를 int 타입으로 손쉽게 변환해 줍니다. <string> 헤더를 포함해야 사용할 수 있습니다.
예제 코드
#include <iostream>
#include <string>
using namespace std;
int main(){
string str1 = "45";
string str2 = "3.14159";
string str3 = "31337 geek";
int myint1 = stoi(str1);
int myint2 = stoi(str2);
int myint3 = stoi(str3);
cout << "stoi(\"" << str1 << "\") is " << myint1 << '\n';
cout << "stoi(\"" << str2 << "\") is "<< myint2 << '\n';
cout << "stoi(\"" << str3 << "\") is " << myint3 << '\n';
return 0;
}
실행 결과
stoi("45") is 45
stoi("3.14159") is 3
stoi("31337 geek") is 31337stoi()의 동작 특징
위 실행 결과에서 알 수 있듯이, stoi()는 다음과 같은 특징을 가집니다.
- 소수점 처리:
"3.14159"처럼 실수 형태의 문자열을 입력하면, 소수점 이하는 무시되고 정수 부분만 반환됩니다(결과: 3). - 문자 처리:
"31337 geek"처럼 숫자 뒤에 문자가 붙어 있으면, 숫자 부분까지만 파싱하고 나머지는 버립니다(결과: 31337).
참고로, 문자열 전체가 유효한 숫자가 아니면 std::invalid_argument 예외가 발생할 수 있으므로, 실제 프로젝트에서는 try-catch 블록으로 감싸 예외 처리를 해주는 것이 안전합니다. 실수(double)로 변환이 필요하다면 stod() 함수를 사용할 수 있습니다.