boost 에서 문자열을 다루는 방법을 알아본다.
boost::lexical_cast
정수형 실수형 값을 문자열로 바꾸거나 반대로 문자열을 정수형, 실수형 값으로 변환할 때 사용한다.
기본 사용
문자열에서 값으로 변환하기, 타입으로 넘겨준다.
auto i = boost::lexical_cast<int>("100");
char chars[] = { 'x', '1', '0', '0', 'y' };
auto i2 = boost::lexical_cast<int>(chars + 1, 3);
해당 변수에 담을 수 없는 값으로 변환하거나 변환이 불가능하다면 boost::bad_lexical_cast를 던진다.
try
{
auto sh = boost::lexical_cast<short>("100000");
}
catch (const boost::bad_lexical_cast& e)
{
cout << e.what() << '\n';
}
try {
auto i3 = boost::lexical_cast<int>("hello");
}
catch (const boost::bad_lexical_cast& e){
cout << e.what() << '\n';
}
예외를 던지지 않는 함수로는 boost::conversion::try_lexical_convert를 이용한다.
int i4 = 0;
if (!boost::conversion::try_lexical_convert("bad stuff", i4))
{
cout << "Cannot convert to int" << '\n';
}
C 함수 std::stoi, stod, stof 등으로 대체할 수 있으나 오류에 예외 처리가 필요하다면 boost::lexical_cast를 고려해본다.
값을 문자열로도 변환가능하다.
static void numeric_to_string()
{
auto s = boost::lexical_cast<std::string>(100);
auto sw = boost::lexical_cast<std::wstring>(100);
}
'C++ > Boost' 카테고리의 다른 글
[Boost] thread (0) | 2022.08.21 |
---|---|
[Boost] any / variant / optional (0) | 2022.08.20 |
[Boost] program_options (0) | 2022.08.20 |
[Boost] 라이브러리 설치 (0) | 2022.08.20 |