Wie Sie feststellen, ob eine Zeichenkette eine Zahl in C++ ist
-
Verwenden Sie die Methode
std::isdigit
, um festzustellen, ob eine Zeichenkette eine Zahl ist -
Verwenden Sie
std::isdigit
mitstd::ranges::all_of
, um zu bestimmen, ob eine Zeichenkette eine Zahl ist -
Verwenden Sie die Methode
find_first_not_of
, um zu bestimmen, ob ein String eine Zahl ist
Dieser Artikel erklärt, wie Sie herausfinden können, ob eine bestimmte C++-Zeichenkette eine Zahl ist. Bevor wir einsteigen, sei darauf hingewiesen, dass die folgenden Methoden nur mit Einzelbyte-Zeichenketten und dezimalen ganzzahligen Zahlen kompatibel sind.
Verwenden Sie die Methode std::isdigit
, um festzustellen, ob eine Zeichenkette eine Zahl ist
Die erste Version ist wahrscheinlich der naheliegendste Weg zur Umsetzung der Lösung. Nämlich, eine Zeichenkette als Parameter an eine Funktion isNumber
zu übergeben, die über jedes einzelne char
in der Zeichenkette
iteriert und mit der Methode isdigit
prüft. Wenn sie die erste Nicht-Nummer findet, gibt die Funktion false
zurück. Wenn keine gefunden wird, wird true
zurückgegeben.
#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;
}
Ausgabe:
Not number
Number
Not number
Beachten Sie, dass wir das Urteil über jede Zeichenkette über einen ternären Bedingungsoperator ausgeben, der eine prägnante Variante des if-else
ist.
Verwenden Sie std::isdigit
mit std::ranges::all_of
, um zu bestimmen, ob eine Zeichenkette eine Zahl ist
Die vorherige Methode war recht einfach für das mächtige C++, also lassen Sie uns eine eloquentere Lösung implementieren, indem wir die C++20-Methode std::ranges::all_of
und einige Lambda-Ausdrücke verwenden. In unserem Fall prüft ranges::all_of
, ob das angegebene Lambda für jedes Element des gegebenen Bereichs s.begin(), s.end()
true zurückgibt und gibt true zurück, wenn die Bedingung erfüllt ist.
#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;
}
Verwenden Sie die Methode find_first_not_of
, um zu bestimmen, ob ein String eine Zahl ist
Diese Version verwendet einen eingebauten string
-Suchalgorithmus. Der Algorithmus sucht nach dem ersten Zeichen, das keinem der Zeichen in der als Argument übergebenen Zeichenkette entspricht (in unserem Fall - "0123456789"
). Wenn das Zeichen nicht gefunden wird, wird string::npos
zurückgegeben, also das Ergebnis des Vergleichs von 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 FacebookVerwandter Artikel - C++ String
- Finden Sie das erste sich wiederholende Zeichen in einer Zeichenfolge in C++
- Finden Sie die längste gemeinsame Teilzeichenfolge in C++
- Großschreiben des ersten Buchstabens einer Zeichenfolge in C++
- Vergleich von String und Character in C++
- Entfernen Sie das letzte Zeichen aus einer Zeichenkette in C++
- Abrufen des letzten Zeichens einer Zeichenkette in C++