Convertir cadena a int con manejo de errores en C
Convertir una cadena a un número entero es una tarea común en programación. Sin embargo, puede haber casos en los que el valor de la cadena no se pueda convertir correctamente a un número entero. En tales escenarios, es crucial manejar el error de conversión con elegancia.
boost::lexical_cast
Uno de los métodos más sencillos para convertir una cadena en un int con error El manejo es utilizar la función boost::lexical_cast. Esta función genera una excepción si la conversión no puede continuar, lo que nos permite detectarla y responder adecuadamente.
#include
int main() {
std::string s;
std::cin >> s;
try {
int i = boost::lexical_cast(s);
} catch (...) {
// Handle the conversion failure
}
}
Uso de funciones de biblioteca estándar
Un enfoque alternativo sin utilizar boost es utilizar las funciones de biblioteca estándar como std::stringstream y std::bad_cast.
#include
#include
int main() {
std::string s;
std::cin >> s;
std::stringstream ss(s);
int i;
if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
throw std::bad_cast();
}
}
Función personalizada
Para personalizar, puede crear una función que emule la funcionalidad de boost::lexical_cast y administre los errores de conversión.
template
T lexical_cast(const std::string& s) {
std::stringstream ss(s);
T result;
if ((ss >> result).fail() || !(ss >> std::ws).eof()) {
throw std::bad_cast();
}
return result;
}
Versiones que no se lanzan
Si prefiere evitar el lanzamiento de excepciones, puede crear versiones que no se lanzan de las funciones anteriores detectando las excepciones y devolviendo un error. indicador.
template
bool lexical_cast(const std::string& s, T& t) {
try {
t = lexical_cast(s);
return true;
} catch (const std::bad_cast& e) {
return false;
}
}
Con estos métodos, puede convertir cadenas a números enteros de manera eficiente y, al mismo tiempo, manejar posibles errores de conversión.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3