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!