Para C ++ 98 , hay algunas opciones:
boost/lexical_cast
Boost no es parte de la biblioteca de C ++, pero contiene muchas extensiones útiles de la biblioteca.
La lexical_cast
plantilla de función ofrece una forma conveniente y coherente para admitir conversiones comunes hacia y desde tipos arbitrarios cuando se representan como texto.
- Documentación de Boost
#include "boost/lexical_cast.hpp"
#include <string>
int main() {
int x = 5;
std::string x_str = boost::lexical_cast<std::string>(x);
return 0;
}
En cuanto al tiempo de ejecución, la lexical_cast
operación tarda aproximadamente 80 microsegundos (en mi máquina) en la primera conversión, y luego se acelera considerablemente después si se realiza de forma redundante.
itoa
Esta función no está definida en ANSI-C y no es parte de C ++, pero algunos compiladores la admiten.
- cplusplus.com
Esto significa que gcc
/ g++
no puedo compilar código usando itoa
.
#include <stdlib.h>
int main() {
int x = 5;
char * x_str = new char[2];
x_str = itoa(x, x_str, 10); // base 10
return 0;
}
No hay tiempo de ejecución para informar. No tengo instalado Visual Studio, que según se informa puede compilar itoa
.
sprintf
sprintf
es una función de biblioteca estándar C que funciona en cadenas C, y es una alternativa perfectamente válida.
Compone una cadena con el mismo texto que se imprimiría si se utilizara el formato en printf, pero en lugar de imprimirse, el contenido se almacena como una cadena C en el búfer señalado por cadena.
- cplusplus.com
#include <stdio.h>
int main() {
int x = 5;
char * x_str = new char[2];
int chars_written = sprintf(x_str, "%d", x);
return 0;
}
El stdio.h
encabezado puede no ser necesario. En cuanto al tiempo de ejecución, la sprintf
operación tarda unos 40 microsegundos (en mi máquina) en la primera conversión, y luego se acelera considerablemente después si se realiza de forma redundante.
stringstream
Esta es la forma principal de la biblioteca C ++ de convertir enteros en cadenas, y viceversa. Hay funciones hermanas similares stringstream
que limitan aún más el uso previsto de la transmisión, como ostringstream
. El uso ostringstream
le dice específicamente al lector de su código que solo tiene la intención de utilizar el <<
operador, esencialmente. Esta función es todo lo que es particularmente necesario para convertir un entero en una cadena. Vea esta pregunta para una discusión más elaborada.
#include <sstream>
#include <string>
int main() {
int x = 5;
std::ostringstream stream;
stream << x;
std::string x_str = stream.str();
return 0;
}
En cuanto al tiempo de ejecución, la ostringstream
operación tarda aproximadamente 71 microsegundos (en mi máquina) y luego se acelera considerablemente si se realiza de forma redundante, pero no tanto como las funciones anteriores .
Por supuesto, hay otras opciones, e incluso puede incluir una de ellas en su propia función, pero esto ofrece una visión analítica de algunas de las más populares.