erklärt mir das mal einer
-
-
facebraker schrieb:
wieso schränkt man so eine geniale Sache wie Switch,case so ein, das es nicht für strings geht ... mhhhhm , wahrsch. das Problem mit einem Array.
Gruss ALex
weil strings in C als Folgen von Zeichen dargetsellt werden und nicht als Werte ganzzahliger Typen.
Wie sollen Folgen von Zeichen auf Gleichheit geprüft werden, wenn if/switch/usw. nur mit ganzzahligen Typen arbeiten? Mit Funktionen wir strcmp.
-
supertux schrieb:
Wie sollen Folgen von Zeichen auf Gleichheit geprüft werden...
C könnte ja z.b. ein verstecktes 'memcmp' oder 'strcmp' dafür benutzen...
tut's aber nicht.
-
ja ten hat recht ... C könnte da die strcmp funktion nehmen ... ich finde das ist inkosequent, und behindert einen beim programmieren ...
wäre auch orakeln, wenn man nun den hintergrund sucht, anscheinend gibt es keinen 100%tig einleuchtenden grund ...
Gruss Alex
-
Äh, kann man meinen Post nicht lesen?
Da wird eine Sprungtabelle draus. Da steht dann
springe an stelle zu tabelle[i]
und nicht
wenn i == 1 springe zu 10
wenn i == 2 springe zu 40
wenn i == 3 springe zu 140
...-> Keine tausen vergleiche -> schneller
-
h1h1 schrieb:
-> Keine tausen vergleiche -> schneller
das ist mir schon klar, wenn ich mit Switch einen ganzzahligen Typ prüfe kann es auch schnell sein, dann beabsichtige ich es ... wenn ich dann einen char[] prüfe, muss ich halt berücksichtigen, das es langsamer ist.
Mir kommt es nicht auf performance an, sondern auf Comfort beim programmieren!
Gruss Alex
-
facebraker schrieb:
ja ten hat recht ... C könnte da die strcmp funktion nehmen ... ich finde das ist inkosequent, und behindert einen beim programmieren ...
würde ich nicht sagen.
eigentlich passt es doch gut ins konzept von C, dass nicht klammheimlich irgendwelche funktionen aufgerufen werden.
C ist nun mal sowas wie eine portable assemblersprache, ziemlich low-levelig eben.
und dazu passt es nun mal nicht, dass solche ausdrücke wie
z.b.if ("hello" == "world") {...}
ein string-compare sind.
-
facebraker schrieb:
Mir kommt es nicht auf performance an, sondern auf Comfort beim programmieren!
Dann bist du bei C reichlich falsch. C ist keine Komfort-Sprache.
-
TactX schrieb:
Dann bist du bei C reichlich falsch. C ist keine Komfort-Sprache.
ich weiss, aber Antort von TEN ist einleuchtender.
Ich habe auch nie behauptet, das C keinen Spaß macht, sonst würde ich mich nicht mit C beschäftigen.
Ich wollt halt mal die Philosophie hinterfragen.Danke für die Antworten!
Gruss Alex
-
@facebraker
Du solltest auch bedenken, dass ein String Vergleich nicht gleich String Vergleich ist. Das ist doch noch etwas komplexer als integrale Werte zu vergleichen. Wie sollen denn die Strings verglichen werden? Auf reiner Bit Basis? Case sensitive oder case insensitive? Sollen Narrow Strings mit wide Strings verglichen werden können? Wenn ja, wie sehen die Kriterien dafür aus? Man müsste dann viel implizieren, was uU einfach unerwünscht ist.
Und mal ehrlich, einswitch (s) { case "foo": break; case "bar": break; default: break; }
sieht jetzt auch nicht viel eleganter aus als
if (s == "foo") // schon klar, in C muss hier ein strcmp stehen ;) { } else if (s == "bar") { } else { }