Comment déterminer si une chaîne de caractères est un nombre en C++
-
Utilisez la méthode
std::isdigit
pour déterminer si une chaîne est un nombre -
Utilisez
std::isdigit
avecstd::ranges::all_of
pour déterminer si une chaîne est un nombre -
Utilisez la méthode
find_first_not_of
pour déterminer si une chaîne est un nombre
Cet article explique comment savoir si une chaîne C++ donnée est un nombre. Avant de nous lancer, il convient de noter que les méthodes suivantes ne sont compatibles qu’avec les chaînes de caractères à un octet et les nombres décimaux intégraux.
Utilisez la méthode std::isdigit
pour déterminer si une chaîne est un nombre
La première version est probablement la façon la plus évidente de mettre en œuvre la solution. Il s’agit de passer une chaîne de caractères en paramètre à une fonction isNumber
, qui itére sur chaque carreau
de la chaîne
et vérifie avec la méthode isdigit
. Lorsqu’elle trouve le premier non-numéro, la fonction retourne faux, si aucun n’est trouvé, elle retourne vrai.
#include <iostream>
using std::cin;
using std::cout;
using std::endl using std::string;
bool isNumber(const string& str) {
for (char const& c : str) {
if (std::isdigit(c) == 0) return false;
}
return true;
}
int main() {
string str1 = "231524randstr23";
string str2 = "23152423";
string str3 = "a3152423";
isNumber(str1) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str2) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str3) ? cout << "Number\n" : cout << "Not number\n";
return EXIT_SUCCESS;
}
Production:
Not number Number Not number
Remarquez que nous produisons un verdict sur chaque chaîne
via un opérateur conditionnel ternaire, qui est une variante concise de if-else
.
Utilisez std::isdigit
avec std::ranges::all_of
pour déterminer si une chaîne est un nombre
La méthode précédente était assez basique pour le puissant C++, alors implémentons une solution plus éloquente en utilisant la méthode C++20 std::ranges::all_of
et quelques expressions lambda. Dans notre cas, ranges::all_of
vérifie si le lambda spécifié retourne vrai pour chaque élément de la plage donnée s.begin(), s.end()
et retourne vrai si la condition est remplie.
#include <algorithm>
#include <iostream>
using std::cin;
using std::cout;
using std::endl using std::string;
bool isNumber(const string& s) {
return std::ranges::all_of(s.begin(), s.end(),
[](char c) { return isdigit(c) != 0; });
}
int main() {
string str1 = "231524randstr23";
string str2 = "23152423";
string str3 = "a3152423";
isNumber(str1) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str2) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str3) ? cout << "Number\n" : cout << "Not number\n";
return EXIT_SUCCESS;
}
Utilisez la méthode find_first_not_of
pour déterminer si une chaîne est un nombre
Cette version utilise un algorithme de recherche par chaîne
intégré. L’algorithme recherche le premier caractère égal à aucun des caractères de la chaîne
passés en argument (dans notre cas - "0123456789"
). Si le caractère n’est pas trouvé, string::npos est renvoyé, nous renvoyons donc le résultat de la comparaison de isNumber
.
#include <iostream>
using std::cin;
using std::cout;
using std::endl using std::string;
bool isNumber(const string& str) {
return str.find_first_not_of("0123456789") == string::npos;
}
int main() {
string str1 = "231524randstr23";
string str2 = "23152423";
string str3 = "a3152423";
isNumber(str1) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str2) ? cout << "Number\n" : cout << "Not number\n";
isNumber(str3) ? cout << "Number\n" : cout << "Not number\n";
return EXIT_SUCCESS;
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn FacebookArticle connexe - C++ String
- Comparaison de chaîne et de caractère en C++
- Supprimer le dernier caractère d'une chaîne en C++
- Obtenir le dernier caractère d'une chaîne en C++
- Différences entre l'opérateur sizeof et la fonction strlen pour les chaînes en C++
- Effacer la chaîne en C++
- Imprimer toutes les permutations de la chaîne en C++