Maison > développement back-end > C++ > 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
Libérer: 2024-11-04 20:21:01
original
809 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal