Double und String konkatenieren



  • Hallo Zusammen,

    wie kann man einen String mit einem double-Wert konkatenieren?

    Beispiel:

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
      string a = "Hallo";
      double b = 2.7;
    
      cout << a + " " + b << endl;
    
      return 0;
    }
    

    Was muss man machen um beide konkatenieren zu können?

    Danke im Voraus,

    Jenny



  • #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
      string a = "Hallo";
      double b = 2.7;
    
      cout << a << " " << b << endl;
    
      return 0;
    }
    


  • Du meinst du willst bei deinem Beispiel "Hallo 2.6" rausbekommen?!

    #include <string>
    #include <iostream>
    
    using namespace std;
    
    int main(void)
    {
      string a = "Hallo";
      double b = 2.7;
    
      cout << a << " " << b << endl;
    
      string result = a + " ";
      a += boost::lexical_cast<std::string>(b);
    
      cout << result << endl;
    
      return 0;
    }
    


  • Eine Möglichkeit ist der std::stringstream:

    double d = 3.14;
    std::stringstream ss;
    ss << "Hallo";
    ss << " " << d << " ";
    ss << "Welt";
    
    std::string s = ss.str();
    

    oder boost::format (könnte wie so vieles von boost auch in c++11 enthalten sein, das kenne ich leider noch nicht):

    double d = 3.14;
    int i = 42;
    std::string s = boost::str(boost::format("PI = %d, *die* Antwort = %d") % d % i);
    


  • Oder boost::lexical_cast:

    double d = 3.14;
    int i = 42;
    std::string s = "PI = " + lexical_cast<string>(d) + ", *die* Antwort = " + lexical_cast<string>(i);
    


  • Hallo Jenny,

    jenny.caros schrieb:

    wie kann man einen String mit einem double-Wert konkatenieren?

    Wenn es nur um die Ausgabe geht, so mache es so wie es manni66 vorgeschlagen hat.
    Möchtest Du als Ergebnis wieder einen std::string haben, so geht das seit C++11 mit der Funktion std::to_string:

    #include <string> // std::to_string
    #include <iostream>
    using namespace std;
    
    int main()
    {
      string a = "Hallo";
      double b = 2.7;
      string c = a + " " + to_string( b );
    
      cout << c << endl;
    
      return 0;
    }
    

    Gruß
    Werner



  • Ich finde, dieses Forum sollte eine Like-Funktion haben, um Beiträge zu honorieren ohne das Forum vollzuposten.

    Genau das würde ich nämlich dann gerne mit Werners Beitrag machen, der wieder einmal lehrreich war. 👍



  • Eisflamme schrieb:

    Ich finde, dieses Forum sollte eine Like-Funktion haben, um Beiträge zu honorieren ohne das Forum vollzuposten.

    Genau das würde ich nämlich dann gerne mit Werners Beitrag machen, der wieder einmal lehrreich war. 👍

    genau das dachte ich mir auch gerade 🙂



  • Eisflamme schrieb:

    Ich finde, dieses Forum sollte eine Like-Funktion haben

    Das fände ich auch schön, wenn man Beiträge wie auf Stackoverflow bewerten kann. Vielleicht ließt Marcus das hier ja. 🙂



  • Eisflamme schrieb:

    Ich finde, dieses Forum sollte eine Like-Funktion haben, um Beiträge zu honorieren ohne das Forum vollzuposten.

    Genau das würde ich nämlich dann gerne mit Werners Beitrag machen, der wieder einmal lehrreich war. 👍

    Dann hast Du wohl den Beitrag von manni66 übersehen, sonst hättest Du Dir den Blödsinn mit boost sparen können ...



  • Belli schrieb:

    Eisflamme schrieb:

    Ich finde, dieses Forum sollte eine Like-Funktion haben, um Beiträge zu honorieren ohne das Forum vollzuposten.

    Genau das würde ich nämlich dann gerne mit Werners Beitrag machen, der wieder einmal lehrreich war. 👍

    Dann hast Du wohl den Beitrag von manni66 übersehen, sonst hättest Du Dir den Blödsinn mit boost sparen können ...

    manni schickt aber alles einfach nur nach cout. Das ist schon etwas anderes, als eine Zahl in einen string zu konvertieren, um ihn dann mit anderen strings zu konkatenieren.



  • std::to_string ist das schönste, aber auch das am wenigsten verbreitetste.
    boost::lexical_cast ist mit das leistungsfähigste, aber am schwierigsten zu installierenste.
    Und der Weg über std::stringstream ist der selbst gebaute Weg, der am ehesten der Ausgabe ähnelt.

    So späße wie sprintf oder sowas könnte man auch nehmen, ist aber C und empfehle ich daher nur meinen Feinden.



  • Skym0sh0 schrieb:

    std::to_string ist das schönste, aber auch das am wenigsten verbreitetste.

    Ne. std::to_string() ist genau dann schön, wenn du einen einzelnen Wert zu einem String konvertieren musst. Für eine Verkettung ist operator<< um einiges sinnvoller.

    Skym0sh0 schrieb:

    boost::lexical_cast ist mit das leistungsfähigste, aber am schwierigsten zu installierenste.

    Es würde mich wundern, wenn zwischen boost::lexical_cast() und std::to_string() ein nennenswerter Unterschied bestünde. Wenn, dann eher zu Gunsten von std::to_string() , da der Implementierungsdetails ausnutzen kann.

    Skym0sh0 schrieb:

    Und der Weg über std::stringstream ist der selbst gebaute Weg, der am ehesten der Ausgabe ähnelt.

    Wenn du einen std::string aus mehreren Werten zusammenbauen willst, ist std::stringstream der Standard-Ansatz. Du baust dir nichts selbst...

    Skym0sh0 schrieb:

    So späße wie sprintf oder sowas könnte man auch nehmen, ist aber C und empfehle ich daher nur meinen Feinden.

    Hier könnte man als Alternative Boost.Format nennen.



  • @daddy:
    Meiner Meinung nach ist nach cout schicken genau das, was in dem Ursprungsposting gefragt war.
    Aber auch falls nicht, gäbe es weitaus einfachere Möglichkeiten, ohne einem (offensichtlichen) Anfänger mit boost zu kommen, siehe zB Werner oder aber auch stringstream für Compiler nach dem alten Standard.



  • Belli schrieb:

    @daddy:
    Meiner Meinung nach ist nach cout schicken genau das, was in dem Ursprungsposting gefragt war.

    gut, ist nicht ganz eindeutig.

    Belli schrieb:

    Aber auch falls nicht, gäbe es weitaus einfachere Möglichkeiten, ohne einem (offensichtlichen) Anfänger mit boost zu kommen, siehe zB Werner oder aber auch stringstream für Compiler nach dem alten Standard.

    den stringstream habe ich als erstes erwähnt.



  • Ich finde, dieses Forum sollte eine Like-Funktion haben, um Beiträge zu honorieren ohne das Forum vollzuposten.

    Genau das würde ich nämlich dann gerne mit Werners Beitrag machen, der wieder einmal lehrreich war. 👍

    Dann hast Du wohl den Beitrag von manni66 übersehen, sonst hättest Du Dir den Blödsinn mit boost sparen können ...

    Ich verstehe zwar den Zusammenhang zwischen Deinem Zitat meiner Aussage und Deiner Aussage nicht, aber mein Fehler war, dass ich Skym0sh0s Beitrag übersehen hatte. Sorry.



  • Eisflamme schrieb:

    Ich verstehe zwar den Zusammenhang zwischen Deinem Zitat meiner Aussage und Deiner Aussage nicht

    Das habe ich befürchtet, tut mir leid ...



  • Ist der Boost Cast nicht mega langsam?



  • Sorry Leute es habndelt sich nicht um einen String sondern UM EINEN CSTRING. Wie würde das dann aussehen? Sorry nochmal.



  • CString = char* bei dir? Oder irgendwas anderes?

    std::string hat eine Funktion für nach C-Strings -> std::string::c_str()


Anmelden zum Antworten