Cómo convertir la Int en una cadena en C++

Jinku Hu 12 octubre 2023
  1. Usar la macro de encadenamiento para convertir la Int literal en una String
  2. Use el método to_string() para la conversión de Int a String
  3. Use la clase std::stringstream y el método str() para la conversión de Int a String
  4. Usa el método std::to_chars para la conversión de Int a String
Cómo convertir la Int en una cadena en C++

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;
}
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Artículo relacionado - C++ Integer