enum yes_or_no{};
-
Danke an alle die mir geholfen haben... auch wenn das Problem nur z.t. gelöst wurde
-
Hallo,
schau dir std::map an, damit könnte es zum Beispiel wie folgt gehen (Achtung ungetestet):#include <iostream> #include <map> #include <string> using namespace std; int main() { map<char,string> conversionMap; conversionMap['j'] = "ja"; char input; cin >> input; cout << conversionMap[input] << endl; }Du solltest allerdings vorher mit find abfangen ob dein input überhaupt in der map vorhanden ist und entsprechend darauf reagieren. Statt einer map<char,string> könnte auch eine map<string,string> sinnvoll sein!
mfG
KaPtainCugelEDIT: Statt einem string in der 2. Komponente der map kannst du natürlich auch einen Funktionszeiger verwenden, wenn du komplexere Sachen machen möchtest.
-
hmm und wie kann ich das bei switch case einbauen????
-
Jud4s schrieb:
hmm und wie kann ich das bei switch case einbauen????
Die map ist dein Switch.
Du assoziierst einen Schluessel mit einer Aktion.
Das switch findet dann in der map selber statt:
map["ja"] = something; map["nein"] = something_else; //[...] map[input].do_something();
-
ahh super thx... das ist natürlich eine seehr praktische sache

könntest du aber vll bitte dennoch einen kleinen codeabschnitt schreiben... mit deklaration und einlesung der 'map' und dem auswählen verschiedener fälle... da mir nochnicht ganz klar ist womit die Map vergleicht
-
void yes() { cout<<"jaaaaaa\n"; } void no() { cout<<"neeeeiiiin\n"; } //funktionszeiger anlegen typedef void func_ptr(); int main() { map<string, func_ptr> m; //map initialisieren map["yes"] = yes; map["no"] = no; //eingabe string input; cin>>input; //switch: if(m.find(input) == m.end()) { //ungueltige eingabe } map[input](); //funktion aufrufen }etwaige fehler vorbehalten :p
-
vielen dank ich werde es direkt mal ausprobieren^^
müsste nicht
#include <map>der Header sein???? Ich benutze den aber map ist immernoch 'undecleared'
und müsste es nicht heissen
void yes() { cout<<"jaaaaaa\n"; } void no() { cout<<"neeeeiiiin\n"; } //funktionszeiger anlegen typedef void func_ptr() name; //€ by Jud4s:hier habe ich noch n namen für den typedef eingefügt int main() { map<string, func_ptr> m; //map initialisieren map["yes"] = yes; map["no"] = no; //eingabe string input; cin>>input; //switch: if(m.find(input) == m.end()) { //€ by Jud4s:was bewirkt diese Zeile?? m.end???? //ungueltige eingabe } map[input](); //funktion aufrufen //€ by Jud4s:warum hier map[input]()<-- warum die klammern....?? }Wo in diesem Code wird eigtl der Vergleich von 'Yes'bzw 'No' gemacht??
Ich habe noch leider keine wirklichen erfahrungen mit map.....
-
wobei man sich den rückgabewert von find merken sollte und darüber aufrufen sollte sonst muss zwei mal gesucht werden
-
Jud4s schrieb:
vielen dank ich werde es direkt mal ausprobieren^^
müsste nicht
#include <map>der Header sein???? Ich benutze den aber map ist immernoch 'undecleared'
using namespace std;
oder
std::map<a, b>
-
Jud4s schrieb:
müsste nicht
#include <map>der Header sein???? Ich benutze den aber map ist immernoch 'undecleared'
das ist der Header ja, und man verwendet ihn via
std::map<KeyType, ValueType>Da sich map im Namensraum std befindet.
Alternative _kann_ man zwarusing namespace std;verwenden, aber es ist generell eine schlechte angewohnheit, die man später bei größeren projekten zu spüren bekommen kann. Und dann nur mit verdammt viel Aufwand behoben werden kann.
Jud4s schrieb:
und müsste es nicht heissen
void yes() { cout<<"jaaaaaa\n"; } void no() { cout<<"neeeeiiiin\n"; }keine ahnung was du meinst
Jud4s schrieb:
//funktionszeiger anlegen typedef void func_ptr() name; //€ by Jud4s:hier habe ich noch n namen für den typedef eingefügtDas mit dem Namen ist humbug, der name für das typedef ist "func_ptr" auch wenn es eventuell für einen anfänger nicht ganz offensichtlich ist.
Jud4s schrieb:
int main() { map<string, func_ptr> m; //map initialisieren map["yes"] = yes; map["no"] = no; //eingabe string input; cin>>input; //switch: if(m.find(input) == m.end()) { //€ by Jud4s:was bewirkt diese Zeile?? m.end???? //ungueltige eingabe }Das überprüft ob die eingabe input uns bekannt ist oder nicht, da kannst du dann eine Fehlerbehandlung einbauen.
Jud4s schrieb:
map[input](); //funktion aufrufen //€ by Jud4s:warum hier map[input]()<-- warum die klammern....??Weil du die funktion so aufrufst, du speicherst ja zeiger auf die funktionen in dem container. Und mit den klammern rufst du die funktion auf die hinter dem zeiger liegt.
Jud4s schrieb:
}[/cpp]
Wo in diesem Code wird eigtl der Vergleich von 'Yes'bzw 'No' gemacht??
Ich habe noch leider keine wirklichen erfahrungen mit map.....Wenn du map[input] aufrufst sucht er den passenden eintrag raus und gibt dann den Wert zurück der dahinter steht, falls input unbekannt ist würde er entweder einen neuen eintrag erstellen oder wenn das objekt const ist würde er eine Ausnahme schmeißen.
Ich denke die genaue funktionsweise, also was dahinter genau statt findet ist noch etwas zu weit für deinen momentanen Wissenstand. Ich empfehle dir ein buch wie z.B. C++ Primer | ISBN: 9783827326126 zu lesen das viele deiner fragen auch behandlen kann und für Einsteiger bestens geeignet ist.
Natürlich kannst du weitere fragen gerne hier im Forum stellen

BR
Vinzenz
-
vielen dank, ich gucke mal in der Bibloiothek danach.....