Maison > Article > développement back-end > Comment convertir en toute sécurité une chaîne en entier 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!