Double und String konkatenieren
-
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 istoperator<<
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()
undstd::to_string()
ein nennenswerter Unterschied bestünde. Wenn, dann eher zu Gunsten vonstd::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, iststd::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?
-
Hallo Jenny,
jenny.caros schrieb:
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?
Das ist ein ungewöhnlicher Wunsch. Ungewöhnlich deshalb, weil in den Umgebungen, in denen CString verwendet wird, normalerweise keine Konsole existiert, sondern nur Fenster. Das macht jede Ausgabe auf std::cout wirkungslos.
Umgekehrt gilt, wenn eine Konsole da ist, macht es i.A. wenig Sinn CString zu benutzen. Dann nehme lieber std::string.Aber wie auch immer ...
Die Klasse CString besitzt einen operator nach const char*. Also:CString s = "egal"; cout << static_cast< const char* >(s) << endl;
Dazu benötigst Du natürlich noch ein #include, in welchem CString definiert ist. Dein von Dir gepostetes Programm enthält kein solches #include.
Falls das fehl schlägt, dann setze bitte in Deinen Projektsettings für 'All Configurations' General->Character Set->'Not Set'.Was ist das für ein Progranmm, an dem Du arbeitest. Konsole, MFC-Applikation, Win32 mit Fenster, DLL, ... ?
Gruß
Werner
-
Lieben Dank Werner. Und auch an die anderen. Dieses c_str() was hier angegeben wurde wandelt einen String in einen CString um oder? Es geht um die umgekehrte Umwandlung von einem CString in einen String. Kam die hier schon iwie vor? Sorry falls ich sie übersehen habe.