AdminMod.de
https://www.adminmod.de/

Sortierfunktion für Namen aus einem Textfile
https://www.adminmod.de/viewtopic.php?t=3493
Seite 2 von 2

Autor:  MrClone [ 06.07.2002, 14:48 ]
Betreff des Beitrags: 

@frostschutz ist es bei strcmp() egal wie Ja geschrieben ist? Sonnste müsste es doch etwa so aussehen
Code:
if(strcmp(Data,"JA")==0 || strcmp(Data,"Ja")==0 || strcmp(Data,"jA")==0 || strcmp(Data,"ja")==0)
oder?

Autor:  Warhead [ 06.07.2002, 16:05 ]
Betreff des Beitrags: 

Um derlei Konstrukte zu vermeiden, sollten man vorher alles in Klein- oder Großbuchstaben umwandeln und dann vergleichen lassen.

Autor:  frostschutz [ 06.07.2002, 17:07 ]
Betreff des Beitrags: 

Ähm, ich denke, daß strcasecmp() solche Fälle wesentlich effizienter löst als 4 strcmp-Aufrufe oder ähnliche Umwandlungsmethoden.

Autor:  MrClone [ 06.07.2002, 17:18 ]
Betreff des Beitrags: 

Oh, stimmt "[...]not case-sensitive."

Autor:  Warhead [ 06.07.2002, 21:21 ]
Betreff des Beitrags: 

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.

Autor:  frostschutz [ 07.07.2002, 09:42 ]
Betreff des Beitrags: 

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.

Autor:  Warhead [ 07.07.2002, 13:54 ]
Betreff des Beitrags: 

Ja gut, sie wandelt nicht den kompletten String um, aber ohne Umwandlung gehts nun mal nicht...

Seite 2 von 2 Alle Zeiten sind UTC+01:00
Powered by phpBB® Forum Software © phpBB Limited
https://www.phpbb.com/