sprintf numeros letras entero convertir cast caracter cadena c++ integer stdstring

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).