Überprüfen Sie, ob die Eingabe in C++ Integer ist
-
Verwenden Sie den Algorithmus
std::find_if
, um zu überprüfen, ob die Eingabe in C++ ganzzahlig ist -
Verwenden Sie die Funktion
std::string::find_first_not_of
, um zu überprüfen, ob die Eingabe in C++ eine Ganzzahl ist -
Verwenden Sie die Funktion
std::string::find_first_not_of
, um zu überprüfen, ob die Eingabe in C++ eine Ganzzahl 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 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
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