"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo puedo manejar los errores de conversión al convertir una cadena a un número entero en C++?

¿Cómo puedo manejar los errores de conversión al convertir una cadena a un número entero en C++?

Publicado el 2024-11-15
Navegar:882

How can I handle conversion errors when converting a string to an integer in C  ?

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.

Último tutorial Más>

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