str_to_long



  • Warum geht dass nicht?

    unsigned long imp_fkt::str_to_long(const std::string &signs)
    {
        unsigned long temp;
        ostringstream Str;
        Str << signs;
        Str >> temp;
        return temp;
    }
    

    ERROR:
    no match for operator >> in Str...

    Auf diese Art wirds in der FAQ erklärt?!

    MfG
    Stromberg



  • ja ostringstream is aber std:: 😃



  • Hallo

    Und außerdem ist ostringstream zum "ausgeben" von Wert, nicht zum "einlesen". Du brauchst natürlich den stringstream ohne o.

    bis bald
    akari



  • Wenn du den Stream sowohl Eingabe als auch Ausgabe benötigst, benutze std::stringstream .
    std::ostringstream ist nur für Output und hat folglich nicht beide Operatoren << und >> überladen.

    Edit: 3 Sekunden zu spät 😉



  • unsigned long imp_fkt::str_to_long(const std::string &s)
    {
        unsigned long temp;
        istringstream Str(s);
        Str >> temp;
        return temp;
    }
    

    So kurz, dass schon fraglich ist, ob das eine eigene Funktion lohnt.

    Gruß,

    Simon2.



  • Ja klar lohnt dass, es gibt doch die Regel welche besagt "doppelten Code" vermeiden, und wenn man dass jetzt 5-6mal braucht...is doch viel angenehmer so eine Funktion zu haben bzw. bei mir ist es eine "static Methode" halt.

    MfG
    Strombe



  • Stromberg schrieb:

    Ja klar lohnt dass, es gibt doch die Regel welche besagt "doppelten Code" vermeiden, und wenn man dass jetzt 5-6mal braucht...is doch viel angenehmer so eine Funktion zu haben bzw. bei mir ist es eine "static Methode" halt.

    MfG
    Strombe

    Naja ... mal ein paar Gegenargumente, die mir so spontan (aus meiner Praxis) einfallen:

    • Sobald Du mehrmals im selben Kontext Strings in Zahlen konvertieren musst, kannst Du denselben istringstream nehmen ... da sparst Du nicht viel.
    • Sobald die Zahlen anders repräsentiert (hex, octal, double, ....) oder in Text eingebettet sind, hilft Deine Funktion Dir wieder nicht.
    • Da der Returntyp nicht in die Signatur mit eingeht, kannst Du das nichtmal von overloading regeln lassen, sondern musst diese umständliche "str_to..."-Benamsung nehmen. Wenn sich irgendwo mal der Typ ändert, musst Du daran denken, eine andere Funktion zu nehmen (fällt nicht automatisch auf, wenn es eine implizite Konvertierung gibt). Da ist der operator<<() schon praktischer , eindeutiger und sicherer.
    • Woher kommt denn der String ? Mit sehr hoher Wahrscheinlichkeit doch sowieso aus einem istream (cin, ifstream, ....) .... warum also erst in einen String und dann nochmal in eine Zahl konvertieren ?

    So eine "str2Number"-Funktion ist zwar eine weitverbreitete Fingerübung - aber in der Praxis gar nicht so hilfreich wie man anfangs meint.

    Gruß,

    Simon2.

    P.S.: Nicht, dass ich das wollte, aber würde eigentlich ein

    string& operator>>(string&, unsigned long);
    

    nicht auch gehen ?



  • benutz boost::lexical_cast


Anmelden zum Antworten