Maison >développement back-end >C++ >Comment puis-je identifier efficacement les valeurs numériques dans une chaîne en C ?

Comment puis-je identifier efficacement les valeurs numériques dans une chaîne en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-18 02:08:10786parcourir

How Can I Efficiently Identify Numeric Values Within a String in C  ?

Comment identifier des chiffres dans une chaîne en utilisant C

Codage d'une fonction capable de valider si une chaîne représente une valeur numérique en C peut poser un défi important. Cet article aborde ce problème et présente une solution efficace.

Tentative originale

Initialement, une fonction nommée isParam a été développée dans le but de vérifier si une ligne dans un texte Le fichier constituait une valeur numérique. La fonction a utilisé les fonctions isdigit et atoi, bien qu'elle ait rencontré des erreurs imprévues.

Approches alternatives

Au lieu de la fonction d'origine, une méthode différente est recommandée. Cette approche consiste à parcourir la chaîne jusqu'à ce qu'un caractère non numérique soit découvert. Si de tels caractères sont identifiés, la chaîne est considérée comme non numérique. Voici le code :

bool is_number(const std::string& s)
{
    std::string::const_iterator it = s.begin();
    while (it != s.end() && std::isdigit(*it)) ++it;
    return !s.empty() && it == s.end();
}

Alternativement, la syntaxe C 11 peut être exploitée pour obtenir le même résultat :

bool is_number(const std::string& s)
{
    return !s.empty() && std::find_if(s.begin(), 
        s.end(), [](unsigned char c) { return !std::isdigit(c); }) == s.end();
}

Limitations et améliorations

Il est à noter que les solutions fournies ne valident que des entiers positifs. Pour les scénarios impliquant des entiers négatifs ou des valeurs décimales, une méthode plus complète basée sur une bibliothèque serait recommandée. Étendre le code pour gérer les entiers négatifs est relativement simple, mais la mise en œuvre de la validation décimale nécessite une approche plus robuste.

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