String und Integer verbinden



  • Hallo zusammen,

    ich würde gerne einen string mit einem integer verbinden.
    z.B.

    string Name = "blabla" und int zahl = 7
    

    sollen nachher so zusammengefügt werden, dass in der Ausgabe
    "blabla - 7" ausgegeben wird.

    Habe es folgendermaßen versucht:

    string newName = Name + to_string(zahl)
    

    doch leider wird mir dann nichts mehr ausgegeben. Ich vermute
    es liegt an einer falschen Umwandlung von string to integer?

    Danke für eure Hilfe!



  • das sieht aber eigentlich gut aus. Zeig mal Code



  • Oh sorry, mein Beitrag oben war nicht ganz richtig.

    Es passiert folgendes:
    Schreibe ich

    string newName = Name + zahl
    

    so erhalte ich garkeine Ausgabe.
    Schreibe ich hingegen

    string newName = Name + to_string(zahl)
    

    bekomme ich folgende Fehlermeldung:

    error C2668: 'std::to_string': Mehrdeutiger Aufruf einer überladenen Funktion
    kann 'std::string std::to_string(long double)' sein
    oder "std::string std::to_string(_ULonglong)"
    oder "std::string std::to_string(_Longlong)"
    bei Anpassung der Argumentliste '(int)'



  • Was ist "zahl"?

    Kann dein Compiler C++11?



  • "Zahl" ist ein integer, der sich aus dem Minimum einiger Zahlen berechnet.

    Ehrlich gesagt weiß ich nicht, ob mein Compiler C++11 kann...



  • #include <string>
    vergessen?



  • Habe mein Problem mittels stringstream gelöst!

    stringstream ss; 
    ss << zahl; 
    newName = name + ss.str()
    

    Falls es auch einfacher geht, nehme ich Verbesserungsvorschläge gerne an 😉



  • Hab hier mal vor längerer zeit irgendwo ein template gesehen welches ich selber ganz gerne nutze.

    #include <sstream>
    #include <string>
    
    template<typename T>
    std::string CastToString(T const &t)
    {
        std::stringstream s;
        s << t;
        return s.str();
    }
    

    Dmit könntest du dann das so realisieren

    std::string newString = oldString + CastToString(zahl);
    

    Vorteil:
    1. Der Stringstream ist Geschichte sobald die Operation beendet wurde (Scope)
    2. Jedem der deinen Code liest wird sehr offensichtlich was du dort machst.
    3. Wiederverwertbarkeit des Codes.



  • Deine erste Lösung ist noch die beste.
    Wenn Du den Compiler updaten kannst:
    Mach das und aktivier anschließend mindestens C++11-Unterstützung für std::to_string() .


  • Mod

    Das ist ein Fehler in VS2010, dass sie nur die 3 Überladungen anbieten, wodurch dann der wohl häufigste Einsatzbereich (int) uneindeutig wird. Du kannst den Wert casten: to_string((long long)zahl)
    Oder vermutlich besser: Nimm eine aktuelle Version.



  • Lustigerweise kennt die Windows Cygwin Version mit GCC 4.8.1 auch kein std::to_string. 😃



  • Skym0sh0 schrieb:

    Lustigerweise kennt die Windows Cygwin Version mit GCC 4.8.1 auch kein std::to_string. 😃

    Auch mit -std=c++11 ?



  • Skym0sh0 schrieb:

    Lustigerweise kennt die Windows Cygwin Version mit GCC 4.8.1 auch kein std::to_string. 😃

    Ja, da ist irgendwas kaputt. Ich habs hässlich gefixt, indem ich einfach ein || true an irgendein #if gehängt hab, was die Existenz verhindert. War irgendwas mit wchar_t Fehlern, die mir egal waren, da ich es eh nicht benutze, oder irgendwie sowas.


Anmelden zum Antworten