Cómo convertir la Int en una cadena en C++
-
Usar la macro de encadenamiento para convertir la
Int
literal en unaString
-
Use el método
to_string()
para la conversión de Int a String -
Use la clase
std::stringstream
y el métodostr()
para la conversión de Int a String -
Usa el método
std::to_chars
para la conversión de Int a String
Este artículo introducirá métodos de C++ para convertir una int
en una string
.
Usar la macro de encadenamiento para convertir la Int
literal en una String
Este método tiene un uso bastante limitado cuando se trata de una conversión de int a string. Es decir, sólo puede ser utilizado cuando los llamados valores numéricos de código duro necesitan ser convertidos a un tipo de string
.
Las macros son bloques de código a los que el programador asigna el nombre, y siempre que se utiliza el nombre, se reemplaza por la expansión de la macro (la parte derecha de la sentencia de la macro).
Esta es una característica del preprocesador C/C++, lo que significa que sólo se puede usar con valores literales.
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define STRING(num) #num
int main() {
string num_cstr(STRING(1234));
num_cstr.empty() ? cout << "empty\n" : cout << num_cstr << endl;
return EXIT_SUCCESS;
}
Resultado:
1234
Note, sin embargo, que cuando usted quiere encadenar el resultado de otra expansión de macro (en este ejemplo NUMBER
que se expande a 123123
), usted necesitaría definir una macro de dos niveles como se muestra en el siguiente bloque de código:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define STRING(num) STR(num)
#define STR(num) #num
#define NUMBER 123123
int main() {
string num_cstr(STRING(NUMBER));
num_cstr.empty() ? cout << "empty\n" : cout << num_cstr << endl;
return EXIT_SUCCESS;
}
Resultado:
123123
Use el método to_string()
para la conversión de Int a String
to_string
es una función de biblioteca incorporada <string>
, que toma un único valor numérico como argumento y devuelve un objeto string
. Este método es la solución recomendada para este problema. Sin embargo, ten en cuenta que pasar los valores de punto flotante al método to_string
produce algunos resultados inesperados, como se demuestra en el siguiente ejemplo de código:
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int n1 = 9876;
double n2 = 0.0000000000000000000001;
double n3 = 2.000000000000123;
string num_str1(std::to_string(n1));
string num_str2(std::to_string(n2));
string num_str3(std::to_string(n3));
num_str1.empty() ? cout << "empty\n" : cout << num_str1 << endl;
num_str1.empty() ? cout << "empty\n" : cout << num_str2 << endl;
num_str1.empty() ? cout << "empty\n" : cout << num_str3 << endl;
return EXIT_SUCCESS;
}
Resultado:
9876
0.000000
2.000000
Use la clase std::stringstream
y el método str()
para la conversión de Int a String
Otra alternativa para resolver este problema es utilizar la clase stringstream
, que almacena internamente la instancia string
y proporciona el método str()
para recuperar el objeto string
del contenido de stringstream
.
#include <iostream>
#include <sstream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
int main() {
int n1 = 9876;
std::stringstream sstream;
sstream << n1;
string num_str = sstream.str();
num_str.empty() ? cout << "empty\n" : cout << num_str << endl;
return EXIT_SUCCESS;
}
Resultado:
9876
Usa el método std::to_chars
para la conversión de Int a String
El siguiente método es relativamente engorroso en comparación con otros, ya que requiere la inicialización de un array temporal char
para el almacenamiento de los resultados convertidos. Aunque, en el lado positivo, este método es independiente del lugar, no se asigna y no se arroja. La función to_chars
toma el rango del array char
y convierte el entero en una cadena de caracteres. Una vez que los caracteres se almacenan en la variable arr
, un nuevo objeto string
se inicializa con el argumento arr.data()
.
#include <array>
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
#define MAX_DIGITS 100
int main() {
int n1 = 9876;
std::array<char, MAX_DIGITS> arr{};
std::to_chars(arr.data(), arr.data() + arr.size(), n1);
string num_str(arr.data());
cout << num_str << endl;
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook