ganzes wort überprüfen
-
Hi,
ich wollte fragen wie ich ein ganzes wort geschickt überprüfen kann, da man ja nicht folgendes machen kann:
char input[25]; std::cin >> input; switch(input) { case "hallo": { std::cout << "Hallo"; } }Mfg Yazoo
P.S.: :xmas1: :xmas1: :xmas1: Sorry das ich in letzter Zeit so viel frage. :xmas1: :xmas1: :xmas1:
-
Strings kannst du nicht akls case-Marken verwenden - da mußt du auf die "klassische" if-else-Kaskade ausweichen (oder mit Arrays und find() arbeiten):
char input[25]; std::cin >> input; if(strcmp(input,"hallo")==0) { std::cout << "Hallo"; } else ... //oder besser: string input; cin>>input; if(input=="hallo") cout<<"Ebenfalls Hallo!"; else ...//und als besonderes Schmankerl noch die Lösung mit Arrays: string valid_inputs[]={"hallo","guten tag",...}; int valid_count = sizeof(valid_inputs)/sizeof(string); string input; cin>>input; switch(find(valid_inputs,valid_inputs+valid_count,input)-valid_inputs) { case 0://"hallo" cout<<"Hallo";break; case 1://"guten tag" cout<<"Ganz wie du wünschst";break; ... }
-
danke das hat mir schonmal sehr geholfen
vielleicht noch eine kleine frage:
was müsste ich machen, wenn ich 2 Wörter auf einmal einlesen möchte?
-
getline() verwenden (oder dem Nutzer erklären, daß er seine Wörter mit _ anstelle von Leerzeichen trennen soll :D).
-
thx
-
CStoll schrieb:
Strings kannst du nicht akls case-Marken verwenden - da mußt du auf die "klassische" if-else-Kaskade ausweichen (oder mit Arrays und find() arbeiten):
.NET generiert Hastabellen für String-switch-Blöcke. Hashtabellen sind hier sicher von der durchschnittlichen Performance am geeignetsten. Leider unterstützt bisher kaum ein Compiler eine standardisierte Hashtabelle, aber immerhin kennt der aktuelle GCC schon 'std::tr1::unordered_map' und unter VC++ kann man ja bis Frühjahr 2008 noch auf 'stdext::hash_map' ausweichen.
– Alle anderen Methoden benötigen auch im Durchschnitt eine logarithmische Laufzeit, während Hashtabellen oft konstante Laufzeit ermöglichen.