본문 바로가기
C++

[C++] - string → int 로 형변환하기

by 개발 고양이 2024. 1. 12.

1. stoi() 메소드 이용하기 (string -> 모든 숫자형 가능)

stoi() 메소드는 간단하게 string을 int로 바꿀 수 있는 함수이다. (string to int 에서 앞 문자를 따와서 stoi라고 부른다.)

stoi(string변수명) 이라고 써주면 된다. stoi() 함수를 사용하려면 <string> 헤더파일을 include 시켜줘야 한다.

-> C언어에서 사용하는 #include <string.h>가 아닌 #include <string>을 사용하므로 혼동하지 않도록 주의하자

 

int 뿐만 아니라 long, double, float 등도 변환이 가능하다. (값 손실이 있을 수 있으니 주의하자)

int로 변환 stoi();
long으로 변환 stol();
double로 변환 stod();
float로 변환 stof();
#include <iostream>
#include <string>
using namespace std;

int main() {
	string s = "12345";
   	string sd = "12345.678";
	//cout << s + 1;	//string에 숫자 연산을 했기 때문에 컴파일 오류!
	int s_num = stoi(s);
   	long l_num = stol(s);
   	double d_num = stod(sd);
   	float f_num = stof(sd);
	cout << s_num + 1 << endl;	//string형이 정상적으로 int형으로 변환되어 문제없이 컴파일된다.
   	cout << l_num + 1 << endl;
   	cout << d_num + 1 << endl;
   	cout << f_num + 1 << endl;
}

 


2. stringstream 클래스 이용하기

stringstream 클래스를 이용하면 string을 int로 변환할 수 있다. 

#include <iostream>
#include <sstream>
using namespace std;

int main() {
	string str = "12345";

	stringstream ss;
	ss << str;
	int i_num;
	ss >> i_num;

	cout << "string : " << str << endl;
	cout << "int : " << i_num + 1;	//string형이 정상적으로 int형으로 변환되어 문제없이 컴파일된다.
}

 


3. boost::lexical_cast 이용하기

boost::lexical_cast<int>(string변수명) 이라고 써주면 된다. int 뿐 아니라 long, double, float로도 변환이 가능한 방법이다.(값 손실은 있을 수 있으니 주의하자.) <boost/lexical_cast.hpp> 헤더파일을 include 시켜줘야 한다. 

-> 비주얼 스튜디오의 버전에 따라서 <boost/lexical_cast.hpp> 헤더파일이 include가 안될 수도 있으니 참고하자. 구 버전의 C++에서 쓰던 방법이므로, 만약 include가 안된다면 헤더파일을 따로 추가하거나, 다른 방법을 써야 한다. (Visual Studio 2022 버전으로는 오류가 났다.)

#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>
using namespace std;

int main(){
    string is = "12345";

	int i_num = boost::lexical_cast<int>(is);	//string is를 int형으로 변환하여 i_num에 저장

	cout << i_num + 1 << endl;
}