본문 바로가기

Programming/C&CPP

C++ string을 int로 변경하는 방법

반응형

프로그래밍을 하다 보면 다양한 타입들을 변환해야 하는 상황이 생깁니다.

C++에서 int나 long 타입을 string으로 변환하는 것은 아래에서 확인 가능합니다.

2019/11/15 - [Programming/C&CPP] - C++ int를 string으로 변경하는 방법

 

C++ int를 string으로 변경하는 방법

C++의 string 클래스는 int나 float, double 같은 타입을 변환하는 메소드를 가지고 있지 않습니다. 다만 표준인 stringstream이나 boost의 lexical_cast를 활용해서 변환이 가능합니다. 아래 링크를 통해 int 등..

psychoria.tistory.com

반대로 string을 int로 변환하는 방법들을 소개합니다.

 

1. std::stringstream 사용

string을 int로 변환하는데도 std::stringstream 사용됩니다.

#include <iostream>
#include <sstream>

int main()
{
	int i = 0;
	std::stringstream ssInt("123");
	ssInt >> i;

	double d = 0.0;
	std::stringstream ssDouble("12.3456");
	ssDouble >> d;

	if (!ssInt.fail())
		std::cout << ssInt.str() << std::endl;
	if (!ssDouble.fail())
		std::cout << ssDouble.str() << std::endl;

	return 0;
}

stringstream을 생성할 때 문자열을 넣고 >> 연산자로 int나 double으로 전달합니다.

std::stringstream 결과

출력하기 전에 fail() 메소드를 사용해서 실제 numeric 타입인지 체크해야 합니다.

문자열이 int 타입으로 변환되지 않는 경우 fail()이 true를 리턴합니다.

 

2. boost::lexical_cast 사용

boost::lexical_cast 역시 사용이 가능합니다.

변환할 타입인 int, double를 입력하면 string이 변환됩니다.

#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>

int main()
{
	std::string i = "123";
	std::string d = "12.3456";

	std::cout << boost::lexical_cast<int>(i) << std::endl;
	std::cout << boost::lexical_cast<double>(d) << std::endl;

	return 0;
}

lexical_cast는 타입 변환을 실패하면 bad_lexical_cast 예외를 발생시킵니다.

예외를 처리하기 위해서 아래와 같은 형태로 작성하면 됩니다.

#include <iostream>
#include <string>
#include <boost/lexical_cast.hpp>

int main()
{
	std::string invalid = "Hello";

	try {
		std::cout << boost::lexical_cast<int>(invalid) << std::endl;
	}
	catch (boost::bad_lexical_cast& e) {
		std::cout << e.what() << std::endl;
	}
	return 0;
}

다음과 같은 예외가 발생하는 것을 확인할 수 있습니다.

bad_lexical_cast 예외

예외처리를 해서 변환되지 않는 타입을 처리하면 됩니다.

 

3. std::stoi() 사용

C++11에 string을 int로 변환하기 위한 std::stoi()가 추가되었습니다.

다양한 타입을 위해 std::stoi(), std::stol(), std::stod(), std::stof() 등의 메소드가 추가되었습니다.

#include <iostream>
#include <string>

int main()
{
	std::string int_val = "123";
	std::string double_val = "12.3456";

	int i = std::stoi(int_val);
	double d = std::stod(double_val);
	
	std::cout << i << std::endl;
	std::cout << d << std::endl;

	return 0;
}

이 경우에 맞는 타입이 아닌 값을 입력하면 std::invalid_argument 예외가 발생합니다.

적절한 예외처리 코드를 추가해서 numeric 타입이 아닌 문자열에 대응하면 됩니다.

 

C++ 개발 환경에 맞춰 원하는 방법을 선택해서 사용하면 됩니다.

다만 int 타입으로 변환되지 않는 문자열에 대한 처리를 주의해서 코드를 작성하면 됩니다.

반응형