Überprüfen Sie, ob die Eingabe in C++ Integer ist

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie den Algorithmus std::find_if, um zu überprüfen, ob die Eingabe in C++ ganzzahlig ist
  2. Verwenden Sie die Funktion std::string::find_first_not_of, um zu überprüfen, ob die Eingabe in C++ eine Ganzzahl ist
  3. Verwenden Sie die Funktion std::string::find_first_not_of, um zu überprüfen, ob die Eingabe in C++ eine Ganzzahl ist
Überprüfen Sie, ob die Eingabe in C++ Integer ist

Dieser Artikel zeigt verschiedene Methoden zum Überprüfen, ob die Eingabe in C++ eine Ganzzahl ist.

Verwenden Sie den Algorithmus std::find_if, um zu überprüfen, ob die Eingabe in C++ ganzzahlig ist

std::find_if ist Teil der STL-Algorithmusbibliothek, die in der Header-Datei definiert ist, und kann zur Suche nach dem bestimmten Element im Bereich verwendet werden. Da es sich bei der Benutzereingabe höchstwahrscheinlich um eine Zeichenkette handelt, wird davon ausgegangen, dass die Eingabedaten in einem std::string-Objekt gespeichert sind. Beachten Sie, dass wir eine Funktion namens isNumber implementieren, die auf std::string verweist und den Wert bool zurückgibt.

Der Prototyp der Funktion std::find_if, die wir im folgenden Beispiel verwendet haben, verwendet drei Argumente, von denen die ersten beiden die Bereichselemente angeben - [first, last]. Das dritte Argument ist ein unäres Prädikat, bei dem es sich um eine Lambda-Funktion handelt, die den Wert bool aus der Auswertung des invertierten Werts der Funktion isdigit zurückgibt. Auf der äußeren Ebene wird der Rückgabewert std::find_if mit dem Rückgabewert str.end() verglichen, da der Wert true des Ausdrucks angibt, dass kein nichtstelliges Zeichen gefunden wurde. also ist es die Nummer. Zusätzlich logisch UND der frühere Ausdruck mit dem !str.empty, um anzuzeigen, dass der String leer ist, und geben false zurück.

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

Ausgabe:

Not number
Number
Not number

Verwenden Sie die Funktion std::string::find_first_not_of, um zu überprüfen, ob die Eingabe in C++ eine Ganzzahl ist

Alternativ können wir die Funktion isNumber mithilfe der für das Objekt std::string integrierten Methode find_first_not_of erneut implementieren. find_first_not_of kann den Zeichenkettenwert verwenden und das erste Zeichen finden, das keinem der Zeichen in der Zeichenkettenfolge entspricht. Wenn die Funktion ein solches Zeichen nicht findet, wird string::npos zurückgegeben. Daher geben wir alle zehn Dezimalstellen als Argument find_first_not_of an und überprüfen die Gleichheit mit npos, da der Ausdruckswert von der Funktion zurückgegeben wird.

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

Ausgabe:

Not number
Number
Not number

Verwenden Sie die Funktion std::string::find_first_not_of, um zu überprüfen, ob die Eingabe in C++ eine Ganzzahl ist

Beachten Sie jedoch, dass die vorherige Methode die reellen Zahlen nicht identifiziert und als unzulässig behandelt. Also können wir das . Hinzufügen Zeichen in die Zeichenkette einfügen und der Funktion ermöglichen, eine beliebige Folge von Ziffern mit einem Punktsymbol als gültige Zahl zu erkennen. Wir müssen zwei Fälle beseitigen, wenn das . Zeichen ist das erste und das letzte Symbol in der Eingabesequenz, was nach unserer Konvention keine gültige reelle Zahl wäre. Wir können die in string integrierten Methoden front und back verwenden, um zu überprüfen, ob die Eingabe nicht mit einem Punktsymbol beginnt / endet. Schließlich UND logisch UND alle drei Ausdrücke miteinander und geben diesen Wert zurück.

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

Ausgabe:

Not number
Number
Number
Autor: 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

Verwandter Artikel - C++ Integer