Zitat:
Zitat:
Ähm, ich denke, daß strcasecmp() solche Fälle wesentlich effizienter löst als 4 strcmp-Aufrufe oder ähnliche Umwandlungsmethoden.
... und da sie auch nicht zaubern kann, im Endeffekt nichts anderes macht.
Ähem! Dann ist das aber schlecht programmiert. Denn eine strcasecmp() Funktion kann durchaus effizienter arbeiten als strcmp() mit vorher in lowercase umgewandelten strings.
Um einen String komplett in kleinbuchstaben umzuwandeln, muss das Char-Array bis zur 0-Terminierung durchlaufen & ggf. modifizert werden.
D.h. der gesamte String wird in einer Schleife zunächst mal komplett bearbeitet.
Ein ordentlich programmiertes strcasecmp() muss das nicht! Es durchläuft wie strcmp() in der gleichen Schleife beide Strings; zusätzlich kommt hier nur die gleiche Abfrage bei bei einer lowercase-Umwandlung hinzu, d.h. jedes Zeichen wird einzeln verglichen und ggf. vor dem Vergleich in kleinschreibung umgewandelt.
D.h. wenn du "ICH BIN EIN VERDAMMT LANGER GROSSGESCHRIEBENER SATZ" mit "bla" vergleichst,
- würde eine lowercase-Funktion zunächst mal den String in einer Schleife durchlaufen und daraus "ich bin ein verdammt langer grossgeschriebener satz" machen, und danach das strcmp im ersten schritt ('i' == 'b') abbrechen.
- ein ordentliches strcasecmp würde im ersten Schritt 'I' in 'i' umwandeln und im ersten Schritt ('i' == 'b') abbrechen.
Die beiden Funktionen hätten nur dann den gleichen Aufwand, wenn die Strings identisch sind; aber selbst dann spart ein ordentliches strcasecmp() einen Funktionsaufruf und viele, viele Zuweisung, da strcasecmp() den String selbst ja nicht ändert.
-> ordentliches strcasecmp() sein deutlich effizienter.