Cómo convertir Char Array a Int en C++
-
Usa la función
std::strtol
para convertir un array de caracteres en un int -
Usa la función
sscanf()
para convertir un array de caracteres en un Int
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
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