Switch mit Stringausdruck nicht möglich?
-
Windoof schrieb:
ODer wenn du die Vorgaben kennst...
dann kann man auch stets ne hashfunktion schreiben, die die strings auf den bereich 0 bis anzahl-1 abbildet.
string sList[4]={"str1","str2","str3","str4"}; int hash_sList(string s){ return s[3]-1; }
for(pos=0;pos<4 && sListe[i]!=str;++pos);
statt liste schug ich halt hashtable vor, weil die nicht langsamer wird, wen mehr daten kommen.
-
map<string,int> stringmap; switch(stringmap["mystring"]))
Devil
-
Jaaa... geht's noch kürzer und einfacher? *löl* OK, das kannte ich bisher noch nicht. Man lenrt aber auch immer wieder etwas neues...
-
Ich habs nun in der Zwischenzeit doch als if-else-Baum gelöst.
Trotzdem danke für die Posts. Vielleicht werde ich zu einem späteren Zeitpunkt darauf eingehen.@Mods: Bitte die anderen Threads löschen. Es gab zu dem Zeitpunkt irgendwie ein Forumproblem.
-
kingruedi schrieb:
Nein kannst du nicht, switch dient nur zum prüfen von Integer-Konstanten. Das Konstrukt ist eh ziemlich veraltet. Eine schöne neue Variante, mit Objekt Support wär toll.
Das stelle ich mir ziemlich schwierig vor, sofern du nicht jedem Objekt ne Hashfunktion mitgeben willst, die gleiche Hashes ausspuckt, wenn die geg. compare-Funktion die Objekte für gleich erklärt - switch ist ja kein Synonym für ne if-else-Kettenkonstruktion.
Ansonsten hat devil81s Konstruktion den Nachteil, dass der []-Operator ggf. neue Elemente anlegt, so dass stringmap["mystring"] für unbekannte Strings 0 gibt. Besser wäre
switch(stringmap.find(my_string)->second) { //... }
-
0xdeadbeef schrieb:
kingruedi schrieb:
Nein kannst du nicht, switch dient nur zum prüfen von Integer-Konstanten. Das Konstrukt ist eh ziemlich veraltet. Eine schöne neue Variante, mit Objekt Support wär toll.
Das stelle ich mir ziemlich schwierig vor, sofern du nicht jedem Objekt ne Hashfunktion mitgeben willst, die gleiche Hashes ausspuckt, wenn die geg. compare-Funktion die Objekte für gleich erklärt - switch ist ja kein Synonym für ne if-else-Kettenkonstruktion.
Nein, ich glaube er meint das mehr aus syntaktischer Sicht. Also quasi ein switch, welches bei nicht-builtins kein wirkliches ist, aber so aussieht.
-
Kann man das nicht auch über die Adressen der Strings im Array machen, die sind doch praktisch ints oder jedenfalls als solche zu sehen.
-
Mis2com schrieb:
Kann man das nicht auch über die Adressen der Strings im Array machen, die sind doch praktisch ints oder jedenfalls als solche zu sehen.
Die Adressen werden zur laufzeit vergeben, wie willst du
da einen Switch drauf bauen ?Devil
-
Hab gelesen, dass switch bei C# auch auf Strings anwendbar ist. Schade, dass das bei C++ net geht.
-
Waermeleitpaste schrieb:
Hab gelesen, dass switch bei C# auch auf Strings anwendbar ist
Japp.