Vérifiez si l'entrée est un entier en C++
-
Utilisez l’algorithme
std::find_if
pour vérifier si l’entrée est un entier en C++ -
Utilisez la fonction
std::string::find_first_not_of
pour vérifier si l’entrée est un entier en C++ -
Utilisez la fonction
std::string::find_first_not_of
pour vérifier si l’entrée est un entier en C++
Cet article présente plusieurs méthodes sur la façon de vérifier si l’entrée est un entier en C++.
Utilisez l’algorithme std::find_if
pour vérifier si l’entrée est un entier en C++
std::find_if
fait partie de la bibliothèque d’algorithmes STL définie dans le fichier d’en-tête <alogrithm>
, et il peut être utilisé pour rechercher l’élément spécifique dans la plage. Puisque l’entrée utilisateur est très probablement une chaîne, nous supposerons que les données d’entrée sont stockées dans un objet std::string
. Notez que nous implémentons une fonction appelée isNumber
qui prend une référence à std::string
et renvoie la valeur bool
.
Le prototype de la fonction std::find_if
que nous avons utilisé dans l’exemple suivant prend trois arguments, dont les deux premiers spécifient les éléments range - [first, last]
. Le troisième argument est un prédicat unaire, qui est une fonction lambda qui renvoie la valeur bool
à partir de l’évaluation de la valeur inversée de la fonction isdigit
. Sur la couche externe, la valeur de retour std::find_if
est comparée à str.end()
, car la valeur true
de l’expression indique qu’aucun caractère non numérique n’a été trouvé; c’est donc le nombre. De plus, nous ET logiquement l’ancienne expression avec le !str.empty
pour indiquer que la chaîne est vide et retourner false
.
#include <algorithm>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
bool isNumber(const string& str) {
return !str.empty() &&
std::find_if(str.begin(), str.end(), [](unsigned char c) {
return !std::isdigit(c);
}) == str.end();
}
int main() {
string str1 = "12345.";
string str2 = "12312";
string str3 = "123142.2";
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";
exit(EXIT_SUCCESS);
}
Production:
Not number
Number
Not number
Utilisez la fonction std::string::find_first_not_of
pour vérifier si l’entrée est un entier en C++
Alternativement, nous pouvons réimplémenter la fonction isNumber
en utilisant la méthode find_first_not_of
intégrée à l’objet std::string
. find_first_not_of
peut prendre la valeur de chaîne et trouver le premier caractère qui n’égale aucun des caractères de la séquence de chaînes. Si la fonction ne trouve pas un tel caractère, string::npos
est renvoyé. Ainsi, nous spécifions les dix chiffres décimaux comme argument find_first_not_of
et vérifions son égalité à npos
, car la valeur de l’expression est renvoyée par la fonction.
#include <algorithm>
#include <iostream>
#include <string>
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 = "12345.";
string str2 = "12312";
string str3 = "123142.2";
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";
exit(EXIT_SUCCESS);
}
Production:
Not number
Number
Not number
Utilisez la fonction std::string::find_first_not_of
pour vérifier si l’entrée est un entier en C++
Notez cependant que la méthode précédente n’identifie pas les nombres réels et les traite comme illégitimes. On peut donc ajouter le .
caractère à la chaîne et permettre à la fonction de reconnaître toute séquence de chiffres avec un symbole de point comme un nombre valide. Nous devons éliminer deux cas où le .
caractère est le premier et le dernier symbole de la séquence d’entrée, qui, selon notre convention, ne serait pas un nombre réel valide. Nous pouvons utiliser les méthodes intégrées string
front
et back
pour vérifier que l’entrée ne commence / ne se termine pas par un point. Enfin, nous ET logiquement les trois expressions les unes avec les autres et retournons cette valeur.
#include <algorithm>
#include <iostream>
#include <string>
using std::cin;
using std::cout;
using std::endl;
using std::string;
bool isNumber3(const string& str) {
return str.find_first_not_of(".0123456789") == string::npos &&
str.front() != '.' && str.back() != '.';
}
int main() {
string str1 = "12345.";
string str2 = "12312";
string str3 = "123142.2";
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";
exit(EXIT_SUCCESS);
}
Production:
Not number
Number
Number
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 Facebook