triviale Frage-Eingabe prüfen, ob es eine zahl ist
-
Hallo,
um eine Fehlermeldung auszugeben, die zutrifft, möchte ich prüfen, ob der Anwender eine Zahl eingegeben hat, wie verlangt, oder Text eingegeben hat. In Vb gibt es eine Funktion IsNumeric...gibt es etwas ähnliches in C++?
Dankepaloncino
-
Hi,
bool IsNumeric(const std::string& bla) { string::const_iterator it; for(it = bla.begin(); it != bla.end(); ++it) if(*it < '0' || *it > '9') break; return it == bla.end(); }
ungetestet, wahrscheinlich falsch.
Eisflamme
-
Sieht ziemlich richtig aus. Es ist sogar noch einen Tick schneller, wenn du das return ein bisschen umwurschtelst und dafür das break rausnimmst.
-
ungetestet, wahrscheinlich falsch.
ROFL.
Du machst mir Spaß, bitte mehr solcher Posts.
#include <iostream> using namespace std; int main() { int zahl; if((cin >> zahl)) cout << "zahl" << endl; cout << "keine Zahl" << endl; }
-
hey optimizer
-
Da fehlt natürlich noch ein else.....
... else cout << "keine Zahl" << endl; ...
-
Das find ich sehr dirty.
-
dafür gabs doch mal strtol()
-
Windows ME ist MIST! schrieb:
Da fehlt natürlich noch [...]
... der Test auf Eingaben wie "42hoch_gar_nix"
-
das ist zwar aus einer liste mit beispielfunktionen von headern eines c-tut, aber deshalb ist es ja nicht unkompatibel. vielleicht hilfts weiter, wenn man den string zerlegt:
ctype.h: Character functions
isdigit() returns non-0 if arg is digit 0 to 9
isalpha() returns non-0 if arg is a letter of the alphabet
isalnum() returns non-0 if arg is a letter or digit
islower() returns non-0 if arg is lowercase letter
isupper() returns non-0 if arg is uppercase letter
-
Am einfachsten wohl so:
#include <cstdlib> #include <iostream> #include <string> using namespace std; bool is_integer(string const &s) { char *p; strtol(&s[0], &p, 10); return *p == '\0'; } bool is_floatingpoint(string const &s) { char *p; strtod(&s[0], &p); return *p == '\0'; } int main() { string eingabe; getline(cin, eingabe); cout << "Integer: " << is_integer (eingabe) << endl << "Double: " << is_floatingpoint(eingabe) << endl; }