String -to- Variable
-
Hallo!
wie kann ich machen das ich z.b.
string variable1="bla", bla="muahahaha"; cout << [bla als variable]; // Ausgabe soll muahahaha sein
wie geht das bzw geht das überhaupt?
das wäre total praktisch
MFG
Schinken
-
cout<<bla;
-
string variable1="bla", bla="muahahaha"; cout << variable1; // Ausgabe soll muahahaha sein
so mein ich, ich will den string der variable1 als variable "ausführen"
-
Ne, das wird nicht gehen.
Komischerweise denken viele am Anfang an solche Sachen...ehrlich gesagt hab ich am Anfang auch an sowas Gedacht
-
der inhalt von variable1 ist aber "bla"
der inhalt von bla ist "muhahaha"string variable1="bla"; //hier wird variable1 der inhalt "bla" _zugeordnet_ string bla="muhahaha"; //hier wird bla der inhalt "muhahaha" _zugeordnet_ cout<<bla; //ausgabe "muahahaha" cout<<variable1 //ausgabe "bla" variable1=bla; //hier wird variable1 der inhalt von bla _zugeordnet_ cout<<variable1; //ausgabe "muahahaha"
weiß jetzt nicht genau mehr was du willst!
-
Was dagegen geht, ist sowas:
#include <iostream> #include <map> #include <string> using namespace std; int main() { map<string, string> my_map; my_map["bla"] = "muhahaha"; cout << my_map["bla"] << endl; }
Allerdings muss man da ein bisschen aufpassen, was man macht. Diese Variante sieht zwar sehr lesbar aus, wenn man aber zum Beispiel
map<string, string> my_map; my_map["bla"] = "muhahaha"; cout << my_map["foobar"] << endl;
schreibt (also vorher der map kein Element unter dem Schlüssel foobar zuweist), hat es den vermutlich ungewollten Effekt, dass in der map eine node unter dem Schlüssel foobar angelegt wird. In diesem Fall enthält die dann einen leeren String.
Die sicherere Variante ist etwas komplizierter, aber dafür...naja, eben sicher:
#include <iostream> #include <map> #include <string> using namespace std; int main() { map<string, string> my_map; my_map["bla"] = "muhahaha"; map<string, string>::iterator itr = my_map.find("bla"); if(itr != my_map.end()) { cout << itr->second << endl; } else { cout << "Nicht gefunden." << endl; } }
Der Iterator itr zeigt, nachdem ihm my_map.find("bla") zugewiesen wurde, auf die Node, die den Schlüssel "bla" hält. Der Wert dieser Node ist ein pair<string, string>, dass an erster Stelle den Schlüssel und an zweiter den Wert enthält. In diesem Fall wäre da also itr->first == "bla" und itr->second == "muhahaha". Wenn my_map.find mit einem Schlüssel aufgerufen wird, den die map nicht kennt, gibt sie my_map.end() zurück, das ist ein Iterator, der quasi hinter das Ende der map zeigt.
-
Leute was macht ihr denn für Sachen??
Wenn ich das richtig verstanden habe, möchte er (oder sie) einfach einen string mittels cout ausgeben.Das Problem ist aber, dass cout << keine strings akzeptiert, deshalb ist folgendes richtig:
#include <iostream> #include <string> int main() { string s = "muhahahahahahaaaaaa!!"; cout << s.c_str(); return 0; }
.c_str() ist eine Funktion, die strings in einen charpointer konvertiert. Kannst du dir merken, braucht man SEHR oft.
-
Ähm, man muss natürlich noch
using namespace std; angeben. Hab ich grad vergessen und ich kann Posts nicht editieren.
-
-CPP- schrieb:
Leute was macht ihr denn für Sachen??
Wenn ich das richtig verstanden habe, möchte er (oder sie) einfach einen string mittels cout ausgeben.Das Problem ist aber, dass cout << keine strings akzeptiert, deshalb ist folgendes richtig:
#include <iostream> #include <string> int main() { string s = "muhahahahahahaaaaaa!!"; cout << s.c_str(); return 0; }
.c_str() ist eine Funktion, die strings in einen charpointer konvertiert. Kannst du dir merken, braucht man SEHR oft.
muhahahahaha
roflwie geil!
Jo genau, namespace net vergessen
[Edit] sorry, hab mich wieder beruhigt
-
Nur mal so. Was war daran so witzig?
Stimmt doch...
-
warum geht bei mir dann das?
int main(int argc, char* argv[]) { string gehtnicht="Geht doch!!!!"; cout<<gehtnicht; return 0; }
-
5er1al schrieb:
warum geht bei mir dann das?
int main(int argc, char* argv[]) { string gehtnicht="Geht doch!!!!"; cout<<gehtnicht; return 0; }
Weil man nicht c_str() braucht um ihn mit cout auszugeben.
Deshalb geht das.
-
Unix-Tom schrieb:
5er1al schrieb:
warum geht bei mir dann das?
int main(int argc, char* argv[]) { string gehtnicht="Geht doch!!!!"; cout<<gehtnicht; return 0; }
Weil man nicht c_str() braucht um ihn mit cout auszugeben.
Deshalb geht das.ach und möglicherweise wollte ich das damit sagen??
-
Hallo!
Ich hab da mal noch 'ne Frage zu. Ich hab die Urfrage nämlich anders verstanden.
Nehmen wir einmal an ich hätte da eine Funktion foo(), und diese Funktion liefert mir einen String zurück (also quasi einen Zeiger auf einen) und jenen String möchte ich als Name einer Variable verwenden. Geht das mit dem Beispiel von Oxdeadbeef ?Gruß André.
-
Geht das überhaupt? Wenn ja, wie?
Bitte ein Beispiel mit Foo() und VariableNoch'n Gruß
-
weiß net ob du sowas meinst:
string foo(string text) { text+="Test"; return text; //mach irgendwas mit text } int main(int argc, char* argv[]) { string str ="Hallo"; string str2=foo(str); //übergibt str2 den bearbeiteten text cout<<str2; return 0; }
-
Nee, eigentlich eher:
int main( void ) { string text = "irgendwas"; int foo(text) = 15; printf("%i",irgendwasTest); }
Geht so was? Ich glaubs nich so recht geb die Hoffnung aber noch nicht auf
-
weiß echt net was du meinst!
-
Genau sowas wie der vorherige post, hab ich mir gedacht!
-
dann erklärt mir was ihr mit der funktion, die eine ganzzahl zurückgibt machen wollt?!