Problème :
La conversion de chaînes en entiers en C présente souvent le problème de gestion des conversions invalides. Cela soulève le besoin d'une méthode efficace pour effectuer de telles conversions avec la possibilité d'indiquer un échec.
Solution : Lexical Cast de Boost
La bibliothèque lexical_cast de Boost offre une solution robuste pour conversions sécurisées de chaîne en entier. Il génère une exception lorsqu'il rencontre une conversion non valide :
<code class="cpp">#include <boost/lexical_cast.hpp> try { int i = boost::lexical_cast<int>(s); // Success handling } catch(...) { // Failure handling }</code>
Alternative sans Boost : flux standard et exceptions
Si Boost n'est pas disponible, vous pouvez utiliser l'entrée standard/ Opérations de flux de sortie avec exceptions :
<code class="cpp">#include <iostream> #include <sstream> #include <string> try { std::stringstream ss(s); int i; if ((ss >> i).fail() || !(ss >> std::ws).eof()) throw std::bad_cast(); // Success handling } catch(...) { // Failure handling }</code>
Faux de distribution lexicale de Boost (facultatif)
Vous pouvez créer une version personnalisée de lexical_cast sans utiliser Boost :
<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 sans lancement (facultatif)
Pour les versions sans lancement, gérez les exceptions dans la fonction lexical_cast :
<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>
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!