¿Cuál es el camino más corto, preferiblemente en línea, para convertir un int en una cadena? Las respuestas usando stl y boost serán bienvenidas.
to_stringlikestd::string s = std::to_string(42)
¿Cuál es el camino más corto, preferiblemente en línea, para convertir un int en una cadena? Las respuestas usando stl y boost serán bienvenidas.
to_stringlikestd::string s = std::to_string(42)
Respuestas:
Puede usar std :: to_string en C ++ 11
int i = 3;
std::string str = std::to_string(i);
boost::lexical_cast<std::string>(yourint) de boost/lexical_cast.hpp
Funciona para todo con el soporte std :: ostream, pero no es tan rápido como, por ejemplo, itoa
Incluso parece ser más rápido que stringstream o scanf:
lexical_casttrae, pero siento que Boost es demasiado exagerado para este tipo de tareas ...
Bueno, la forma más conocida de hacerlo es utilizando el operador de flujo:
#include <sstream>
std::ostringstream s;
int i;
s << i;
std::string converted(s.str());
Por supuesto, puede generalizarlo para cualquier tipo usando una función de plantilla ^^
#include <sstream>
template<typename T>
std::string toString(const T& value)
{
std::ostringstream oss;
oss << value;
return oss.str();
}
#include <sstream>.
std::;)
Si no puede usarlo std::to_stringdesde C ++ 11, puede escribirlo tal como se define en cppreference.com:
std::string to_string( int value )Convierte un entero decimal con signo en una cadena con el mismo contenido que lostd::sprintf(buf, "%d", value)que produciría para buf suficientemente grande.
Implementación
#include <cstdio>
#include <string>
#include <cassert>
std::string to_string( int x ) {
int length = snprintf( NULL, 0, "%d", x );
assert( length >= 0 );
char* buf = new char[length + 1];
snprintf( buf, length + 1, "%d", x );
std::string str( buf );
delete[] buf;
return str;
}
Puedes hacer más con eso. Solo use "%g"para convertir flotante o doble a cadena, use "%x"para convertir int a representación hexadecimal, y así sucesivamente.
Función no estándar, pero se implementa en los compiladores más comunes:
int input = MY_VALUE;
char buffer[100] = {0};
int number_base = 10;
std::string output = itoa(input, buffer, number_base);
Actualizar
C ++ 11 introdujo varias std::to_stringsobrecargas (tenga en cuenta que el valor predeterminado es base-10).
ostreamfunciona, hasta que necesite guardar la cadena de números como algo distinto de un formato binario, octal o hexadecimal (por ejemplo, base-32).
itoa()o stricmp()se dan como respuesta a algo .
sprintftambién puedo lograr el objetivo del OP (aunque todavía sufre la falta de flexibilidad si se necesita algo más que los números de base comunes).
La siguiente macro no es tan compacta como una de un solo uso ostringstreamo boost::lexical_cast.
Pero si necesita conversión a cadena repetidamente en su código, esta macro tiene un uso más elegante que el manejo directo de secuencias de cadena o la conversión explícita cada vez.
También es muy versátil, ya que convierte todo lo que admite operator<<(), incluso en combinación.
Definición:
#include <sstream>
#define SSTR( x ) dynamic_cast< std::ostringstream & >( \
( std::ostringstream() << std::dec << x ) ).str()
Explicación:
Esta std::deces una forma libre de efectos secundarios para convertir lo anónimo ostringstreamen genérico ostreampara operator<<()que la búsqueda de funciones funcione correctamente para todos los tipos. (De lo contrario, se mete en problemas si el primer argumento es de tipo puntero).
El dynamic_castdevuelve el tipo de nuevo para ostringstreamque pueda llamarlo str().
Utilizar:
#include <string>
int main()
{
int i = 42;
std::string s1 = SSTR( i );
int x = 23;
std::string s2 = SSTR( "i: " << i << ", x: " << x );
return 0;
}
inline template<class T> std::string SSTR( T x ) { return dynamic_cast< std::ostringstream & >( (std::ostringstream() << std::dec << x) ).str() }harías? (¿No han probado, pero me pregunto lo que sería ir mal y por qué?
int(mi primer ejemplo). Pero sin el ostreamvisible para el compilador en main(ya que está escondido dentro de la función de plantilla), que tratará de buscar operator<<()para const char []en mi segundo ejemplo - que estirar la pata. Sé que el OP solo solicitó un int, pero esta macro más genérica es tan útil (y en realidad bastante generalizada) que pensé en incluirla aquí.
Puede usar esta función para convertir inta std::stringdespués de incluir <sstream>:
#include <sstream>
string IntToString (int a)
{
stringstream temp;
temp<<a;
return temp.str();
}
Puede incluir la implementación de itoa en su proyecto.
Aquí está modificado para trabajar con std :: string: http://www.strudel.org.uk/itoa/
#include <string>
#include <stdlib.h>
Aquí, hay otra manera fácil de convertir int a string
int n = random(65,90);
std::string str1=(__String::createWithFormat("%c",n)->getCString());
puede visitar este enlace para obtener más métodos https://www.geeksforgeeks.org/what-is-the-best-way-in-c-to-convert-a-number-to-a-string/
Supongamos que tengo integer = 0123456789101112. Ahora, este entero se puede convertir en una cadena por la stringstreamclase.
Aquí está el código en C ++:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
string s;
stringstream st;
for(i=0;i<=12;i++)
{
st<<i;
}
s=st.str();
cout<<s<<endl;
return 0;
}