HOWTO · C++

Cómo convertir Char Array a Int en C++

Este artículo demuestra formas de convertir un array de caracteres a tipo int en C++

En esta página

Este artículo introducirá métodos de C++ para convertir un array char en un tipo int.

Usa la función std::strtol para convertir un array de caracteres en un int

El método strtol interpreta los primeros caracteres válidos del array char a un tipo entero. La función toma la base numérica del entero convertido como un tercer parámetro, con un valor de - {0,2,3,…,36} rango. El segundo parámetro es de tipo char **endptr, que es opcional, y si se pasa almacena la dirección apuntada al carácter más allá del último carácter interpretado.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str1("23323experimental_string");

  auto str1_n = std::strtol(str1.data(), nullptr, 10);
  printf("%ld", str1_n);

  return EXIT_SUCCESS;
}

Resultado:

23323

El siguiente ejemplo demuestra la función strtol con el segundo parámetro siendo non-nullptr. Fíjate que estamos usando la función printf sólo como una herramienta de verificación de tipos, y deberías usar cout en cualquier otro caso. También es importante implementar rutinas de manejo de errores para los detalles de strtol que pueden verse aquí.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str1("23323experimental_string");
  char *char_part = nullptr;

  auto str1_n = std::strtol(str1.data(), &char_part, 10);
  printf("%ld\n", str1_n);
  printf("%s\n", char_part);
  ;

  return EXIT_SUCCESS;
}

Resultado:

23323
experimental_string

Usa la función sscanf() para convertir un array de caracteres en un Int

La función sscanf lee la entrada del buffer de cadenas de caracteres y la interpreta según el especificador de formato, que se pasa como segundo parámetro. El valor numérico se almacena en el puntero de la variable int. Los especificadores de formato se detallan ampliamente en el manual sscanf página:

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str1("23323experimental_string");

  int str1_n;
  sscanf(str1.data(), "%d", &str1_n);
  printf("%d\n", str1_n);

  return EXIT_SUCCESS;
}

Resultado:

23323

También podemos reimplantar el ejemplo anterior para almacenar la parte no numérica de la cadena de entrada. En este caso, añadimos el especificador de formato %s al segundo argumento y le pasamos el puntero char de destino como cuarto argumento. Fíjate que sscanf es una función variádica ya que puede tomar un número variable de argumentos de un llamador.

#include <iostream>
#include <string>

using std::cin;
using std::cout;
using std::endl;
using std::string;

int main() {
  string str1("23323experimental_string");

  int str1_n3;
  string str2{};
  sscanf(str1.data(), "%d%s", &str1_n3, str2.data());
  printf("%d\n", str1_n3);
  printf("%s\n", str2.data());

  return EXIT_SUCCESS;
}

Resultado:

23323
experimental_string