Vérifiez si l'entrée est un entier en C++

Jinku Hu 12 octobre 2023
  1. Utilisez l’algorithme std::find_if pour vérifier si l’entrée est un entier en C++
  2. Utilisez la fonction std::string::find_first_not_of pour vérifier si l’entrée est un entier en C++
  3. Utilisez la fonction std::string::find_first_not_of pour vérifier si l’entrée est un entier en C++
Vérifiez 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
Auteur: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

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

Article connexe - C++ Integer