C ++ integer-> std :: 문자열 변환. 간단한 기능?
문제
문제 : 정수가 있습니다. 이 정수는 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 ++ 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 () 사이에서 선택하는 것입니다).
제휴하지 않습니다 StackOverflow