C++에서 문자열을 정수(int)로 변환하는 방법은 크게 두 가지가 있습니다. 하나는 문자열 스트림(stringstream)을 활용하는 방법이고, 다른 하나는 C++11부터 도입된 stoi() 계열 변환 함수를 사용하는 방법입니다. 각 방법의 특징과 예제 코드를 살펴보겠습니다.
1. stringstream을 이용한 변환
stringstream은 문자열을 입력 스트림처럼 다룰 수 있게 해주는 클래스입니다. 문자열에서 숫자를 추출할 때 유용하며, 변환 실패 여부를 확인하는 에러 검사 로직을 함께 작성하면 더욱 안전하게 사용할 수 있습니다.
예제 코드
#include<iostream>
#include<sstream>
using namespace std;
int str_to_int(const string &str) {
stringstream ss(str);
int num;
ss >> num;
return num;
}
int main() {
string s = "12345";
int x = str_to_int(s);
cout << x;
}
출력 결과
12345
2. C++11의 stoi() 계열 함수 활용
C++11부터는 문자열을 숫자 타입으로 변환하는 전용 함수들이 표준 라이브러리에 추가되어, 별도의 스트림 객체 없이 한 줄로 간편하게 변환할 수 있습니다.
- stoi() : string → int
- stol() : string → long
- stoll() : string → long long
- stoul() : string → unsigned long
예제 코드
이 함수들은 아래와 같이 간단하게 사용할 수 있습니다.
#include<iostream>
using namespace std;
int main() {
string s = "12345";
int x = stoi(s);
cout << x;
}
출력 결과
12345
참고: stoi()의 추가 기능과 예외 처리
stoi() 함수는 stoi(문자열, 시작 위치 포인터, 진수) 형태로 호출할 수 있으며, 세 번째 인자를 통해 2진수, 16진수 등 다양한 진법의 문자열도 변환할 수 있습니다. 또한 변환에 실패하면 invalid_argument 예외가, 값이 범위를 초과하면 out_of_range 예외가 발생하므로, 필요에 따라 try-catch 문으로 예외 처리를 해주는 것이 좋습니다.