Variablen verbinden?
-
Hallo,
Also ich habe mal eine dumme Frage, wie kann man in c++ 2 Variablen verbinden?
Also zb. so:char lbl[55] = "Label"; int x = 5; char var1[4] = "asd";
Nun möchte ich dass "Label5 = asd" wird
Also muss man ja jetzt den char lbl mit dem int x verbinden, doch wie geht das?
Bin für jeden Tipp dankbar!
-
wenn du's nur für die ausgabe brauchst dann
printf ("%s%d = %s", lbl, x, var1);
wenn's wieder in' speicher soll: 'sprintf'
-
Kaspar schrieb:
Hallo,
Also ich habe mal eine dumme Frage, wie kann man in c++ 2 Variablen verbinden?
Also zb. so:char lbl[55] = "Label"; int x = 5; char var1[4] = "asd";
Nun möchte ich dass "Label5 = asd" wird
Also muss man ja jetzt den char lbl mit dem int x verbinden, doch wie geht das?
Bin für jeden Tipp dankbar!
int start = 5; (sizeof lbl) lbl[start++] = ' '; lbl[start++] = '='; lbl[start++] = ' '; for (int i = start; i < start + 3 /* sizeof varl */; i++ { lbl[i] = var1[i-start]; }
oder gleich vernünftig mit strings und stringkonkatenation...
-
Oh oh ... das ist nicht soo leicht, wie du dir das vorstellst: "Variablen" an sich sind etwas Abstraktes, nicht das, was du auf dem Bildschirm schreibst, wenn du sie definierst, ebensowenig dessen Wert. In deinem Beispiel hattest du einen C-String (char[]), eine int-Variable und wieder einen C-String. Wenn du nun am Ende alles in einem String haben willst, musst du erst die int-Variable in einen String umwandeln und die drei Strings dann verketten. Auf "C-Art" ginge das so:
char lbl[55+128] = "Label"; // erster string int x = 5; // zahl als int char x_str[8]; // zahl als string itoa(x,x_str,10); // "zuweisung" char var1[4] = "asd"; // zweiter string strcat(lbl,x_str); // verkettung 1 strcat(lbl,var1); // verkettung 2
In diesem Beispiel würde also in "lbl" nun der komplette String stehen. Er würde allerdings "Label5asd" heißen. Deinen Effekt kannst du gut mit formatierten Strings erzielen (wieder nach C-Art):
char lbl[55] = "Label"; int x = 5; char var1[4] = "asd"; char dest[128]; sprintf(dest,"%s %d = %s",lbl,x,dest);
Allerdings sieht das für C++ Anfänger etwas verwirrend aus ... es geht auch mit C++ Stringstreams, mit dem operator <<, da sparst du dir die Sachen mit "%s" und so ... aber an deiner Stelle würde ich auf jeden Fall ein gutes Tutorial oder ein Buch über die theoretischen Grundlagen der Programmierung lesen, um zu verstehen, was Variablen, was Werte, was Adressen sind und so - sonst stellt man sich leicht logisch erscheinde Zusammenhänge vor, die gar nicht zutreffen!
-
Wir sind hier im C++-Board und um diese drei Variablen zu verknüpfen, ist std::ostringstream ja wohl die sinnigste Standardlösung.
#include <sstream> ... char c_str[] = "Label" // Entweder mit C-"Strings"... int num = 5; std::string cpp_str = "asd"; // ...oder gleich mit C++-Strings. std::ostringstream stream; stream << c_str << num << " = " << cpp_str; std::string ergebnis = stream.str();
-
Hallo,
Vielen Dank für die Antworten. Nun habe ich noch ein problem.
char lbl[55+128] = "Label"; // erster string int x = 5; // zahl als int char x_str[8]; // zahl als string itoa(x,x_str,10); // "zuweisung" char var1[4] = "asd"; // zweiter string strcat(lbl,x_str); // verkettung 1 //strcat(lbl,var1); // verkettung 2 lbl->Caption = var1;
Wenn ich das nun Compilen will, sagt der:
[C++ Fehler] Unit1.cpp(28): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich*
[C++ Warnung] Unit1.cpp(29): W8004 'var1' wurde ein Wert zugewiesen, der nie verwendet wirdKönnt ihr mir nochmal weiterhelfen?
-
Du hast da ein grundsätzliches Problem. In C++ kannst du aus einem String keinen Variablennamen machen. Das musst du anders lösen.
-
1. Zeige mal, in welcher Zeile dein Fehler auftritt.
2. Wenn du nicht einen driftigen Grund dazu hast, würde ich dir auf jeden Fall raten, die stringstreams von C++ zu benutzen, ähnlich wie "operator void" es zeigte:#include <sstream> ... std::string lbl = "Label" int x = 5; std::string var1 = "asd"; std::ostringstream stream; stream << lbl << ' ' << x << " = " << var1; // sogar mit Leerzeichen! std::string ergebnis = stream.str();
-
Till schrieb:
1. Zeige mal, in welcher Zeile dein Fehler auftritt.
2. Wenn du nicht einen driftigen Grund dazu hast, würde ich dir auf jeden Fall raten, die stringstreams von C++ zu benutzen, ähnlich wie "operator void" es zeigte:#include <sstream> ... std::string lbl = "Label" int x = 5; std::string var1 = "asd"; std::ostringstream stream; stream << lbl << ' ' << x << " = " << var1; // sogar mit Leerzeichen! std::string ergebnis = stream.str();
Also ich habs jetzt so gemacht wie du und void gesagt haben, doch dann kommt bei folgendem code
std::string lbl = "Label"; // Entweder mit C-"Strings"... int x = 5; std::string var1 = "asd"; // ...oder gleich mit C++-Strings. std::ostringstream stream; stream << lbl << ' ' << x << " = " << var1; std::string ergebnis = stream.str(); Label1->Caption = ergebnis;
der Fehler:
[C++ Fehler] Unit1.cpp(29): E2034 Konvertierung von '_STL::string' nach 'AnsiString' nicht möglich
-
Woooo? Wo ist bei dir Zeile 29?
-
Till schrieb:
Woooo? Wo ist bei dir Zeile 29?
Oh sorry, das is die zeile "Label1->Caption = ergebnis;"
-
Ich arbeite nicht mit Borland C++ Builder, aber ich schätze, dass einfach ein C-String erwartet wird. Also schreibst du einfach
Label1->Caption = ergebnis.c_str(); // macht aus einem std::string ein char[]
Klappt's jetzt?
-
Aaaaaaaaalso das klappt jetzt so, doch nun mochte ich es ja so haben:
std::string lbl = "Label"; // Entweder mit C-"Strings"... int x = 5; std::string var1 = "asd"; // ...oder gleich mit C++-Strings. std::ostringstream stream; stream << lbl << x; std::string ergebnis = stream.str(); std::string ergebnis2 = ergebnis.c_str(); ergebnis2->Caption = var1;
da kommt der fehler:
[C++ Fehler] Unit1.cpp(30): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich*
und der is in der zeile "ergebnis2->Caption = var1;"
Ich hoffe Ihr verliert die gedult mit ir nicht
-
Hallo
du hast ein grundsätzliches Verständnissproblem. Du willst unter C++Builder dynamisch Labels mit einem von dir zusammengestellten Namen erzeugen. Das geht schon, und wie das findest du in der FAQ des BCB-Forums.
bis bald
akari
-
jaaaaaaaaa genau das will ich.
doch wonach muss ich in der bcb hilfe suchen?
-
Hallo
ich meinte die FAQ
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39305.html
insbesondere den Abschnitt "Komponenten benutzen"bis bald
akari
-
Hi Zsammn
Tolles Forum!
Hab im Google nach der Möglichkeit gesucht, eine Textzeile (Pfad) in einer Schlaufe zu alternieren.
_Till_ hat mir die Lösung gebracht....Danke nochmal für das sauber dokumetierte (und damit suchbare!) Forum, Ihr seid Helden....
Gruss
Roric
-
Danke danke ... nicht gleich übertreiben, man hilft halt wo man kann ...