Maison >développement back-end >C++ >Comment puis-je vérifier efficacement si une chaîne C représente un nombre ?

Comment puis-je vérifier efficacement si une chaîne C représente un nombre ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-17 09:20:25217parcourir

How Can I Efficiently Check if a C   String Represents a Number?

Comment déterminer si une chaîne représente un nombre en C

Déchiffrer si une chaîne constitue un nombre est souvent rencontré en programmation, notamment en scénarios impliquant l’analyse de fichiers ou la validation de données. Cette question explore les approches permettant d'identifier les chaînes numériques en C.

La fonction d'origine, isParam, a tenté d'utiliser atoi et isdigit pour déterminer si une chaîne est numérique. Bien qu'atoi tente de convertir une chaîne en nombre entier, il n'est pas fiable pour détecter les caractères non numériques dans la chaîne.

Approche itérative efficace

Une méthode plus efficace implique parcourir la chaîne caractère par caractère jusqu'à ce qu'un caractère non numérique soit rencontré. Si l'itération se termine sans trouver de caractère non numérique, la chaîne est considérée comme numérique. Voici la fonction mise à jour :

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();
}

Approche Lambda C 11

En C 11 et versions ultérieures, les lambdas peuvent simplifier ce processus :

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();
}

Remarque : Ces solutions ne gèrent que les entiers positifs. Pour les entiers et les fractions négatifs, envisagez d'utiliser une approche plus complète basée sur une bibliothèque.

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