Maison  >  Article  >  développement back-end  >  Comment convertir en toute sécurité une chaîne en entier en C ?

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

Susan Sarandon
Susan Sarandonoriginal
2024-11-05 14:23:02961parcourir

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>

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>

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>

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>

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