Cómo analizar la Int desde la cadena en C++
-
Usa la función
std::stoi
para analizar la int de la cadena -
Usa la función
std::from_chars
para analizar la int de la cadena
Este artículo explicará varios métodos de cómo analizar una int
de la cadena en C++.
Usa la función std::stoi
para analizar la int de la cadena
La función stoi
es parte de la biblioteca de cadenas definida en el encabezado string
, y puede ser utilizada para convertir valores de cadenas a diferentes tipos numéricos. std::stoi
, std::stol
y std::stoll
se utilizan para la conversión de enteros con signo. La función stoi
toma un solo objeto string
como argumento obligatorio, pero el programador también puede especificar la dirección para almacenar el entero y la base numérica en la que la cadena de entrada tiene que ser procesada.
El siguiente ejemplo muestra múltiples casos de uso de la función stoi
. Observe que stoi
puede manejar espacios en blanco en la cadena, pero cualquier otro carácter causará una excepción std::invalid_argument
.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
num1 = stoi(s1);
num2 = stoi(s2);
num3 = stoi(s3);
num4 = stoi(s4, nullptr, 2);
num5 = stoi(s5);
num6 = stoi(s6, nullptr, 16);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
Resultado:
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: 333 | num6: 51
Usa la función std::from_chars
para analizar la int de la cadena
Como alternativa, la función from_chars
de la biblioteca de utilidades puede analizar los valores int
. Ha sido parte de la biblioteca estándar desde la versión C++17 y está definida en el archivo de cabecera <charconv>
.
Muy diferente de la stoi
, from_chars
opera en los rangos de caracteres, sin tener en cuenta la longitud del objeto y los bordes. Por lo tanto, el programador debe especificar el inicio y el final del rango como los dos primeros argumentos. El tercer argumento es la variable int
a la que se asignará el valor convertido.
Sin embargo, from_chars
sólo puede manejar el signo principal -
en la cadena de entrada; por lo tanto, imprime valores de basura de num5
y num6
en el siguiente ejemplo.
#include <charconv>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::from_chars;
using std::stoi;
using std::string;
int main() {
string s1 = "333";
string s2 = "-333";
string s3 = "333xio";
string s4 = "01011101";
string s5 = " 333";
string s6 = "0x33";
int num1, num2, num3, num4, num5, num6;
from_chars(s1.c_str(), s1.c_str() + s1.length(), num1);
from_chars(s2.c_str(), s2.c_str() + s2.length(), num2);
from_chars(s3.c_str(), s3.c_str() + s3.length(), num3);
from_chars(s4.c_str(), s4.c_str() + s4.length(), num4, 2);
from_chars(s5.c_str(), s5.c_str() + s5.length(), num5);
from_chars(s6.c_str(), s6.c_str() + s6.length(), num6);
cout << "num1: " << num1 << " | num2: " << num2 << endl;
cout << "num3: " << num3 << " | num4: " << num4 << endl;
cout << "num5: " << num5 << " | num6: " << num6 << endl;
return EXIT_SUCCESS;
}
Resultado:
num1: 333 | num2: -333
num3: 333 | num4: 93
num5: -1858679306 | num6: 0
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