C++/Boost

[Boost] 문자열 다루기

로파이 2022. 8. 21. 23:16

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