zwei Strings -> Zahlen



  • Ach herrje und wiederein mal Belästigung von meiner Seite 😉
    Ich möchte zwei Strings in Zahlen umwandeln. Inden FAQ habe ich gefunden, daß ich es über einen stringstream machen sollte:

    string AlsString("-12"); 
    	int d = 0;
             int i = 0;
    	stringstream Str;
    
    	Str << AlsString;
    	Str >> d;
    	cout << d << endl;
    
    	AlsString = "20";
    	Str << AlsString;
    	Str >> i;
    	cout << i << endl;
    

    soweit so gut, doch bekomme ich nicht die erwartete Ausgabe:
    -12
    20
    sondern:
    -12
    0

    Warum? Beim Debuggen stellte ich fest, daß der neue AlsString nicht in Str landet.
    Sorry, Ströme sind für mich ein neues Thema mit bodenlosen Löchern 🙄



  • hi

    du musst den buffer leeren

    #include <string> 
    #include <iostream> 
    #include <sstream>
    using namespace std;
    int main() 
    {
       string AlsString("-12");  
        int d = 0; 
        int i = 0; 
        stringstream Str; 
    
        Str << AlsString; 
        Str >> d; 
        cout << d << endl; 
    
        Str.clear();      
       // Str.ignore(Str.rdbuf()->in_avail());
    
        AlsString = "20"; 
        Str << AlsString; 
        Str >> i; 
        cout << i << endl;
    
    }
    

    <edit> stimmt, str.ignore ist hier überflüssig...und die funktion str um jahre besser</edit>



  • vielen Dank



  • vielen Dank



  • Die einfachere Methode dürfte sein, den Buffer zu überschreiben. Also:

    #include <string>  
    #include <iostream>  
    #include <sstream> 
    
    int main()  
    { 
        std::string AlsString("-12");   
        int d = 0;  
        int i = 0;  
        std::stringstream Str;  
    
        Str.str(AlsString);  //schreibt den Inhalt von AlsString in den stringbuf von Str
        Str >> d;  
        std::cout << d << std::endl;  
    
        Str.clear();   //falls was schief gelaufen ist, setzt das hier die Flags wieder auf OK
    
        AlsString = "20";  
        Str.str(AlsString);  
        Str >> i;  
        std::cout << i << std::endl; 
    }
    

Anmelden zum Antworten