Einmal String zu Int und zurück (fehlerbehandlung)
-
Ich hab grad bei http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488-and-start-is-0-and-postdays-is-0-and-postorder-is-asc-and-highlight-is-.html
mal reingesehen, aber nicht herausgefunden wie ich einen String ersteinmal auf zahlen prüfen kann?!Also meine frage, wie kann ich einen beliebigen std::string auf zahlen prüfen bevor ich ihn auslese und mir evtl. ne exception abfangen müsste.
In meinem fall heißt es entweder Zahlen oder keine behandlung.
-
Erstens: Du kannst in einer Schleife alle Zeichen abfragen, ob es Ziffern (isdigit(s[i])), Dezimalpunkte etc. sind - aber gerade bei Gleitkommawerten ist es vermutlich einfacher, die Rückgabe der Umwandlung auszuwerten (bei den Streams kannst du (a) die Fehlerflags abfangen und (b) nachsehen, ob noch Zeichen im Stream zurückgeblieben sind; strtod() liefert einen Zeiger auf das erste unpassende Zeichen zurück - bzw. das Stringende, wenn alles geklappt hat).
-
hm ok ...
nen stream werd ich jetzt nicht dafür anfangen, ich dacht aber es ginge evtl. n bisschen kürzer als mit ner schleife, danke ^^
-
Dann nimm doch strtod() und seine Kollegen:
string input; ... char* inp_ende; double value = strtod(input.c_str(),&inp_ende); if(*inp_ende!='\0') { cout<<"ungültige Eingabe"; } else { cout<<"ihre Zahl ist "<<value; }
-
ja das iss natürlich auch gut.
thx dir ^^