c++ - numeros - int to string c linux
c++ integer-> std:: cadena de conversión. Función simple? (3)
Ahora en c ++ 11 tenemos
#include <string>
string s = std::to_string(123);
Enlace a referencia: http://en.cppreference.com/w/cpp/string/basic_string/to_string
Problema: tengo un número entero; este entero debe convertirse a un tipo stl :: string.
En el pasado, he usado stringstream
para hacer una conversión, y eso es algo engorroso. Sé que la forma C es hacer un sprintf
, pero prefiero hacer un método C ++ que sea seguro para el tipo (er).
¿Hay una mejor manera de hacer esto?
Aquí está el enfoque de cadena de caracteres que he usado en el pasado:
std::string intToString(int i)
{
std::stringstream ss;
std::string s;
ss << i;
s = ss.str();
return s;
}
Por supuesto, esto podría ser reescrito así:
template<class T>
std::string t_to_string(T i)
{
std::stringstream ss;
std::string s;
ss << i;
s = ss.str();
return s;
}
Sin embargo, tengo la idea de que esta es una implementación bastante ''pesada''.
Zan señaló que la invocación es bastante agradable, sin embargo:
std::string s = t_to_string(my_integer);
En cualquier caso, una forma más agradable sería ... agradable.
Relacionado:
¿Alternativa a itoa () para convertir un entero a la cadena C ++?
Como mencioné anteriormente, recomendaría boost lexical_cast. No solo tiene una sintaxis bastante buena:
#include <boost/lexical_cast.hpp>
std::string s = boost::lexical_cast<std::string>(i);
también proporciona algo de seguridad:
try{
std::string s = boost::lexical_cast<std::string>(i);
}catch(boost::bad_lexical_cast &){
...
}
No realmente, en el estándar. Algunas implementaciones tienen una función itoa () no estándar, y usted puede buscar la versión lexical_cast de Boost, pero si se apega al estándar, es prácticamente una elección entre stringstream y sprintf () (snprintf () si lo tiene).