istringstream iss("23asdf"); int i; iss >> i; soll fehlschlagen
-
ich brauche eine string to int funktion die fehlschlägt wenn nicht der ganze string umgewandelt wird! wie macht man das?
std::istringstream iss("23"); int i; iss >> i; // soll funktionierenstd::istringstream iss("23asdf"); int i; iss >> i; // soll fehlschlagen
-
powered schrieb:
ich brauche eine string to int funktion die fehlschlägt wenn nicht der ganze string umgewandelt wird! wie macht man das?
std::istringstream iss("23"); int i; iss >> i; // soll funktionierenstd::istringstream iss("23asdf"); int i; iss >> i; // soll fehlschlagenkannst beispielsweise vorher mit std::isdigit die einzelnen Zeichen überprüfen.
-
powered schrieb:
ich brauche eine string to int funktion die fehlschlägt wenn nicht der ganze string umgewandelt wird! wie macht man das?
std::istringstream iss("23"); int i; iss >> i; // soll funktionierenstd::istringstream iss("23asdf"); int i; iss >> i; // soll fehlschlagenstd::istringstream iss("23asdf"); // oder iss("23"); int i; if( iss >> i && iss.eof() ) { // iss enthielt ausschließlich den Integer; sonst nichts ...Gruß
Werner
-
danke sehr

hab jetzt beides drin. der stringstream wandelt auch erfolgreich um wenn + und - im string vorkommen, das protokol erlaubte aber nur ziffern.
-
if(std::find_if(input.begin(),input.end(),not(isdigit))!=input.ende()) cout<<"falsche Eingabe";(das Schnipselchen sollte sich eigentlich beschweren, wenn in deiner Eingabe etwas anderes als Ziffern vorkommt)
-
jo wie gesagt ist schon drin. habs allerdings per for-schleife gemacht. ist verständlicher meiner meinung...

-
Meinungssache - ich nutze die STL-Algorithmen, wenn sie für eine Situation passen ;).
btw, du könntest auch nur das erste Zeichen der Eingabe auf isdigit() überprüfen, damit werden Eingaben ala "+1234" abgewiesen.
-
Bei isdigit muss man nach unsigned char casten.