[sstream] auslesen, aber wie ?



  • Hi,

    ich möchte aus einem string zwei Integer rauslesen. Wollte das mal mit stringstreams ausprobieren. Hab im Netz nur minimalste Beispiele gefunden, die mir für meine kleine Umwandlung nicht helfen.

    Hab einen String in der Form "(<intX>x<intY>)" (zB."(800x600)").

    Wie bekomme ich die beiden ints aus dem Stream raus?

    danke,
    don_basto.



  • hm...naja ich würde den string erstmal in die zahlen zerlegen, und dann eben in streams bearbeiten!

    die find - methoden und substr dürften deine freunde sein!



  • hier mal ein kleines beispiel, musst natürlich noch überarbeiten, aber das prinzip dürfte so erklärt werden

    int main(int argc, char* argv[])
    {
    string zahl={"0123456789"};
    string eingabe;
    cin>>eingabe;
    size_t start = eingabe.find_first_of(zahl,0);
    size_t end = eingabe.find_first_not_of(zahl,start);
    size_t len = end-start;
    string ausgabe = eingabe.substr(start,len);
    double d;
    strstream str;
    str<<ausgabe;
    str>>d;
    cout<<ausgabe<<endl;
    cout<<++d<<endl;
    getch();
            return 0;
    }
    


  • Danke für die Antwort. Hatte gehofft, dass es mit Hilfe der Streams einen schöneren Weg gibt. 😞
    Hier ist mein Kode:

    std::string::size_type start, mid, end;
    		std::string	str = "(800x600)";
    		start = str.find('(');
    		mid = str.find('x');
    		end = str.find(')');
    		std::stringstream stream;
    		stream << str.substr(start+1, mid-(start+1));
    		stream >> xRes;
    		stream.clear();
    		stream << str.substr(mid+1, end-(mid+1));
    		stream >> yRes;
    		std::cout << "X: " << xRes << std::endl << "Y: " << yRes << std::endl;
    


  • Sowas geht auch:

    std::stringsteram stream;
    char temp;
    int x, y;
    
    stream << str;
    stream >> temp >> x >> temp >> y >> temp;
    

    Nutzt allerdings den Vorteil dass es immer ein Zeichen zu lesen gibt vor und nach den Zahlen 😉



  • Statt das Rad neu zu erfinden, kann man auch einfach zu boost::tokenizer greifen.



  • boost::tokenizer ist genial!



  • @LordJaxom:
    Danke, sowas hab ich gesucht. 👍
    Hab das Format des Strings vereinfacht. Die Klammern waren gar nicht notwendig:

    std::stringstream stream;
    char theX;
    stream << "800x600";
    stream >> xRes >> theX >> yRes;
    

    @boost und co:
    So einfach wie die oberen vier Zeilen wird boost::tokenizer nicht sein. 😉



  • du hast keine fehlerbehandlung


Anmelden zum Antworten