programing tip

C ++ 정수-> std :: string 변환.

itbloger 2020. 10. 16. 07:12
반응형

C ++ 정수-> std :: string 변환. 간단한 기능?


문제 : 정수가 있습니다. 이 정수는 stl :: string 유형으로 변환해야합니다.

과거에 저는 stringstream변환을 해왔는데 , 그저 번거 롭습니다. 나는 C 방식이을 수행하는 것을 알고 sprintf있지만 typesafe (er) 인 C ++ 메서드를 훨씬 선호합니다.

이 작업을 수행하는 더 좋은 방법이 있습니까?

다음은 내가 과거에 사용한 stringstream 접근 방식입니다.

std::string intToString(int i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

물론 다음과 같이 다시 작성할 수 있습니다.

template<class T>
std::string t_to_string(T i)
{
    std::stringstream ss;
    std::string s;
    ss << i;
    s = ss.str();

    return s;
}

그러나 나는 이것이 상당히 '무거운'구현이라는 개념을 가지고 있습니다.

Zan은 호출이 매우 훌륭하다고 언급했습니다.

std::string s = t_to_string(my_integer);

어쨌든 더 좋은 방법은 ... 좋은 것입니다.

관련 :

정수를 문자열 C ++로 변환하는 itoa ()의 대안은 무엇입니까?


이제 C ++ 11에서는

#include <string>
string s = std::to_string(123);

참조 링크 : http://en.cppreference.com/w/cpp/string/basic_string/to_string


앞서 언급했듯이 lexical_cast를 강화하는 것이 좋습니다. 상당히 좋은 구문을 가지고있을뿐만 아니라 :

#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(i);

또한 몇 가지 안전을 제공합니다.

try{
  std::string s = boost::lexical_cast<std::string>(i);
}catch(boost::bad_lexical_cast &){
 ...
}

표준에서는 그렇지 않습니다. 일부 구현에는 비표준 itoa () 함수가 있으며 Boost의 lexical_cast를 찾을 수 있지만 표준을 고수한다면 stringstream과 sprintf () (만약 있다면 snprintf ()) 중에서 선택할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/273908/c-integer-stdstring-conversion-simple-function

반응형