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 funktionieren
    
    std::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 funktionieren
    
    std::istringstream iss("23asdf"); int i; iss >> i; // soll fehlschlagen
    

    kannst 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 funktionieren
    
    std::istringstream iss("23asdf"); int i; iss >> i; // soll fehlschlagen
    
    std::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.


Anmelden zum Antworten