"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment puis-je gérer les erreurs de conversion lors de la conversion d’une chaîne en entier en C++ ?

Comment puis-je gérer les erreurs de conversion lors de la conversion d’une chaîne en entier en C++ ?

Publié le 2024-11-15
Parcourir:273

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

Convertir une chaîne en entier avec la gestion des erreurs en C

La conversion d'une chaîne en entier est une tâche courante en programmation. Cependant, il peut arriver que la valeur de chaîne ne puisse pas être convertie en nombre entier. Dans de tels scénarios, il est crucial de gérer l'échec de la conversion avec élégance.

boost::lexical_cast

L'une des méthodes les plus simples pour convertir une chaîne en un entier avec une erreur la manipulation consiste à utiliser la fonction boost::lexical_cast. Cette fonction lève une exception si la conversion ne peut pas avoir lieu, nous permettant de l'intercepter et de répondre de manière appropriée.

#include 

int main() {
  std::string s;
  std::cin >> s;

  try {
    int i = boost::lexical_cast(s);
  } catch (...) {
    // Handle the conversion failure
  }
}

Utilisation des fonctions de bibliothèque standard

Une approche alternative sans utiliser boost consiste à utiliser les fonctions de bibliothèque standard telles que std::stringstream et 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();
  }
}

Fonction personnalisée

Pour la personnalisation, vous pouvez créer une fonction qui émule la fonctionnalité de boost::lexical_cast et gère les échecs de conversion.

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;
}

Versions sans lancement

Si vous préférez éviter de lancer des exceptions, vous pouvez créer des versions sans lancement des fonctions ci-dessus en interceptant les exceptions et en renvoyant un échec indicateur.

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;
  }
}

En utilisant ces méthodes, vous pouvez convertir efficacement des chaînes en entiers tout en gérant les échecs de conversion potentiels.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3