String aus String zuweisen



  • Hallo ich hab eine kleine Frage. Wie kann man ein String der in einem String steht einem anderen zuweisen und nach dem Leerzeichen die Zahl in einer Variable abspeichern?

    std::string szInput = "money_max 1.55";
    if( szTest.find( " " ) != 0 ){
    	std::string szFirst; // = den String vor dem Leerzeichen 
    	float flValue; // = die Kommazahl nach dem Leerzeichen
    }
    

    LG



  • std::istringstream str("money_max 1.55");
    str >> first >> value;
    

    Nutz keine ungarische Notation!



  • Nathan schrieb:

    std::istringstream str("money_max 1.55");
    str >> first >> value;
    

    Nutz keine ungarische Notation!

    Danke dir. Aber warum nicht? Sieht im Code meiner Menung nach schöner aus



  • duplex0 schrieb:

    Nathan schrieb:

    std::istringstream str("money_max 1.55");
    str >> first >> value;
    

    Nutz keine ungarische Notation!

    Danke dir. Aber warum nicht? Sieht im Code meiner Menung nach schöner aus

    http://www.c-plusplus.net/forum/p1773551#1773551



  • Naja. Sieht nicht schön aus was der Kollege da geschrieben hat. Zum Glück sind Geschmäcker verschieden.

    Wie auch immer.. hab noch ein Lösungsweg gefunden.

    std::string szInput = "money_max 1.55";
    std::string szCVar  = szInput.substr( 0, szInput.find( " " ) );
    float	    flValue = ( float )std::strtod( szInput.substr( szInput.find( " " ) + 1 ).c_str(), nullptr );
    


  • Was genau spricht gegen meine Lösung?

    Edit: Und ungarische Notation macht in C++ absolut überhaupt keinen Sinn, da die Sprache viel zu komplex ist, um das konsequent durchzusetzen. Der Weg, den C++ besonders in letzter Zeit geht, geht eher weg von Typen und mehr zu den Dingen, die man damit machen kann.

    auto x = getValue();
    x *= 2;
    std::cout << x;
    

    Muss ich wissen, was x genau ist? Nein.
    Ich muss nur wissen, dass x operator*= und operator<< unterstützt.
    Wieso also nachgucken, was getValue genau zurückliefert und ein Prefix festlegen.
    Und nehmen wir an, getValue() werd wird von int zu float geändert. Dann muss ich ja das Prefix anpassen, obwohl sich sonst nichts ändert! Werd ich das machen? Jetzt ja. In einem größeren Projekt? Wohl kaum. Und schon ist man inkonsequent.
    Anderes Beispiel:
    Vor einiger Zeit schrieb ich folgenden Code:

    auto task = std::async(...);
    ...
    doSth(task.get());
    

    Ich war da neu zu C++11's Threadlibrary. Ich war so neu, dass ich nicht einmal wusste, welchen Typ std::async überhaupt zurückliefiert! Ich wusste lediglich, dass ich mit get den Wert bekommen. Wieso also prefixen?
    Und wenn man erst einmal mit Templates anfängt, macht UN absolut gar keinen Sinn mehr.



  • Gegen deine Lösung spricht absolut nichts dagegen. In der Zeit als dein Post kam ist mir die Methode eingefallen. Deswegen hab ich einen zweiten weg dazu noch geposted. Nun ja selbst bei Templates "wende ich die UN an".

    template<class T> T Read( DWORD dwBaseAddress ){
    	T TBuffer;
    	ReadProcessMemory( hProcess, reinterpret_cast<LPCVOID>( dwBaseAddress ), &TBuffer, sizeof( T ), NULL );
    	return TBuffer;
    }
    

Log in to reply