Double und String konkatenieren



  • 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()



  • char cstring[] = "foo";
    std::string string(cstring);
    char another_cstring[4];
    strcpy(another_cstring, string.c_str());
    

    Wo ist das Problem?
    Andererseits:

    char buffer[100];
    sprintf(buffer, "Hallo: %f", some_float);
    


  • Es müsste also heissen:

    #include <cstring>
    #include <iostream>

    using namespace std;

    int main(void)
    {
    CString a = "Hallo";
    double b = 2.7;

    cout << a + " " + b << endl;

    return 0;
    }

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



  • jenny.caros schrieb:

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

    möchtest du einen string haben oder beides "einfach nur" nach cout ausgeben?

    wie auch immer, für beide Varianten wurden dir Lösungen genannt. Was verstehst du nicht?

    edit: Wieso zum Geier bist du auf einmal bei CString gelandet? Kann es sein, dass du einfach nur ein wenig trollen willst?



  • Ich will statt einem string einen cstring das ist alles. Sorry nochmal.



  • jenny.caros schrieb:

    Ich will statt einem string einen cstring das ist alles. Sorry nochmal.

    warum?



  • ja dann mach das so wie auf den ersten Seiten vorgeschlagen, da bekommst du einen std::string raus. Und danach nutzt du die c_str() Methode von dem



  • Hallo Jenny,

    jenny.caros schrieb:

    Es müsste also heissen:

    #include <cstring>
    #include <iostream>

    using namespace std;

    int main(void)
    {
    CString a = "Hallo";
    double b = 2.7;

    cout << a + " " + b << endl;
    return 0;
    }

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

    Es ist nicht klar, was Du meinst.

    Es gibt eine Klasse CString von Microsoft in der ATL- oder MFC-Umgebung. In diesem Fall schaue Dir die Methode CString::Format an.

    Und es gibt C-strings, das sind nakte char-arrays, für die der Header #include <cstring> Funktionen bereitstellt. Dann versuche es mit strncat oder strcat und vorheriger Umwandlung des double in Text mit sprintf - dann wäre das C-Forum für Dich das richtige.

    Was soll das Ergebnis der Konkatenation sein? Willst Du sie hintereinander ausgeben, oder möchtest Du einen neuen CString oder C-string als Ergebnis?

    Gruß
    Werner



  • Danke nochmal für die Antworten. Ich will den CSTring ausgeben mit cout. Mit String ist das kein Problem, nur wie geht man mit CStrings um um sie auszugeben?



  • Sory Kollege, aber du liest dir offensichtlich die Beiträge hier nicht wirklich durch.

    Werner hat eben auf die Mehrdeutigkeit deines Wortes CString hingewiesen, da wäre eine Antwort nötig.

    Zweitens wäre das gewünschte Ergebnis mal ganz interessant zu wissen.

    Drittens stehen im Prinzip sämtliche Lösungen schon auf den vergangenen 2 Seiten.

    Viertens mit welchem Buch/Lehrer/Tutorial lernst du, dass du eine einfache Stringausgabe nicht hinbekommst?

    int main()
    {
    	char str1[] = "Hallo ";
    	double d = 3.1415927;
    
    	cout << str1  << d << endl;
    
    	stringstream ss;
    	ss << str << d;
    
    	string result = ss.str();
    
    	char * cstr = result.c_str();
    
    	cout << cstr << endl;
    
    	return 0;
    }
    

    Wenn dieser unschöne Code nicht hilft, dann willst du nur trollen.



  • char * cstr = result.c_str();
    

    Bist Du sicher, dass das geht?


Anmelden zum Antworten