Maison > développement back-end > C++ > le corps du texte

Comment convertir en toute sécurité une chaîne en entier en C ?

Susan Sarandon
Libérer: 2024-11-05 14:23:02
original
1032 Les gens l'ont consulté

How to Safely Convert a String to an Integer in C  ?

Convertir une chaîne en Int avec Bool/Fail en C

Introduction :

En C, convertir une chaîne en un entier peut être une tâche simple, mais il existe des cas où nous pouvons rencontrer des échecs de conversion. Dans de tels scénarios, il devient nécessaire de gérer ces exceptions ou échecs avec élégance.

Boost::lexical_cast:

Boost fournit une bibliothèque polyvalente avec de nombreux utilitaires, dont boost : :lexical_cast. Cette fonction permet la conversion de chaînes en différents types de données et lève une exception en cas d'échec. Par exemple :

<code class="cpp">#include <boost/lexical_cast.hpp>
int i = boost::lexical_cast<int>(s);</code>
Copier après la connexion

Sans Boost :

Si Boost n'est pas disponible, nous pouvons utiliser une approche basée sur le flux C :

<code class="cpp">#include <sstream>
int i;
std::stringstream ss(s);
if ((ss >> i).fail() || !(ss >> std::ws).eof()) {
  throw std::bad_cast();
}</code>
Copier après la connexion

Fake Boost :

En l'absence de Boost, il est possible de créer une fonction personnalisée qui imite sa fonctionnalité :

<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

Non- Versions lancées :

Si vous le souhaitez, des versions non lancées de ces fonctions peuvent être créées en interceptant les exceptions appropriées et en renvoyant un booléen indiquant le succès ou l'échec :

<code class="cpp">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

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