Maison > développement back-end > C++ > Comment puis-je convertir des chaînes en entiers en C tout en gérant les erreurs de conversion ?

Comment puis-je convertir des chaînes en entiers en C tout en gérant les erreurs de conversion ?

Barbara Streisand
Libérer: 2024-11-04 22:49:02
original
1042 Les gens l'ont consulté

How Can I Convert Strings to Integers in C   While Handling Conversion Errors?

Conversion de chaînes en entiers avec échec booléen en C

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

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

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

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>
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