문제

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

과거에는 사용했습니다 stringstream 전환을하기 위해, 그것은 단지 번거로운 일입니다. 나는 C 방식이 a를하는 것임을 알고 있습니다 sprintf, 그러나 나는 Oppinsafe (ER) 인 C ++ 방법을 많이 할 것입니다.

더 좋은 방법이 있습니까?

여기에 내가 과거에 사용한 문자열 접근법은 다음과 같습니다.

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 () 사이에서 선택하는 것입니다).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top