Maison  >  Article  >  développement back-end  >  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 ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-04 20:21:01733parcourir

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 erreur la manipulation consiste à utiliser la fonction boost::lexical_cast. Cette fonction lève une exception si la conversion ne peut pas avoir lieu, ce qui nous permet de l'attraper et de répondre de manière appropriée.

<code class="cpp">#include <boost/lexical_cast.hpp>

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

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

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.

<code class="cpp">#include <iostream>
#include <sstream>

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();
  }
}</code>

Fonction personnalisée

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

<code class="cpp">template <typename T>
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;
}</code>

Versions non lancées

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

<code class="cpp">template <typename T>
bool lexical_cast(const std::string& s, T& t) {
  try {
    t = lexical_cast<T>(s);
    return true;
  } catch (const std::bad_cast& e) {
    return false;
  }
}</code>

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn