Multiple String addition



  • Ich kann ja zu einem String mit

    str = str +"1"+"2"
    

    1 und 2 mit s verbinden. Dies klappt allerdings nicht mit

    str += +"1"+"2"
    

    (was man von anderen sprachen gewöhnt ist. Gibt da nen umweg, so dass es mit += klappt und keine Meldung à la "Zwei Zeiger konnten nicht addiert werden" kommt

    Wie löst man ferner das Problem, wenn man ein string und ein int in string packen will?

    str = s +"string";
    sprintf(s,...);// wobei dies ja auch nur ein char* ausgibt...
    

    ? Hat int keinen impliziten cast nach string?

    Verdammt, ich bin wohl von high-level sprachen verwöhnt

    Edit: Ich kenne http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html
    Aber das is irgendwie nicht gerade eine bequeme art



  • std::string str("Das ist ein ");
    str += "Test";
    str += " der" + std::string(" 2.!");
    

    ...

    std::ostringstream ss;
    ss << variable;
    std::string str(ss.str());
    

    🙂



  • Intuitiv,dass ich nicht direkt selber drauf gekommen bin!

    😃

    Danke.



  • Dh aber dass ich ne menge Overhead habe um 3 ints in einen String zu packen, nicht wahr?

    Korrektur, wie zum Geier geb ich denn 3 ints an, ohne gleich drei ostringstreams zu erzeugen? mit .clear() schein ich ja nicht wirklich was zu bewirken und der Defaultconstructor meckert, weil er auf einmal keine 0 Argumente nimmt



  • #include <iostream>
    #include <sstream>
    #include <string>
    using namespace std;
    
    int main()
    {
        stringstream ss;
        ss << 1 << 2 << 3 << 4;
        string s = ss.str();
        cout << s << endl;
        cin.get();
        return 0;
    }
    


  • Ist zwar auch "overkill", aber guck dir einfach mal Boost.Format an.

    #include <string>
    #include <boost/format.hpp>
    
    void foo()
    {
        int a, b, c;
        // ...
        std::string s = str(boost::format("%d, %d, 0x%08x") % a % b % c);
    }
    

    EDIT: oder boost::lexical_cast

    #include <string>
    #include <boost/lexical_cast.hpp> // bin mir nicht 100% sicher, aber ich denke das file heisst so
    
    void foo()
    {
        int x = 123;
        std::string s = boost::lexical_cast<std::string>(x); // verwendet intern auch nen stringstream
    }
    

Anmelden zum Antworten