Hallo sam,
IMHO würde ich nicht mit strcmp vergleichen, sondern immer nur das
nächste Zeichen, das noch nicht passte.
Bsp:
Eingabe = Hallo ; Liste = {Alpha, Hallo, Lima, Tango, Yankee}
Nun legst Du los mit:
unsigned char macht_position(void) {
nhigh = 4, nlow = 0;
npos = (nhigh - nlow) / 2
matchpos = 0;
matchmax = 3;
if (Liste [npos][matchpos] > Eingabe[matchpos) nhigh = npos;
if (Liste [npos][matchpos] < Eingabe[matchpos) nhigh = npos;
if (Liste [npos][matchpos] == Eingabe[matchpos) {
if (matchpos < matchmax) matchpos ++;
else
if (strcmp (Liste[npos], Eingabe, strlen(Eingabe)) ) return TRUE;
else return FALSE;
}
}
Was passiert ist folgendes:
Ist Eingabe an der ersten Stelle kleiner als die erste Stelle der
Eingabe, dann wird im oberen Teil der Liste weiter nachgeschaut. Man
halbiert also immer die betrachtete Menge.
Weiterhin weiß ich, bis zu welcher Steelle maximal Unterschiede
auftauchen können - matchmax.
Nun benutze ich den oberen Algorithmus so lange, bis dies ich diese
Tiefe erreichen und weiß, das mein betrachteter String bis dort
übereinstimmt. Schlußendlich schaue ich noch mit strcmp nach obs
wirklich so ist und geb dann den entsprechenden Wert zurück.
Dies ist wesendlich schneller, als die strcmp Funktion, die jedesmal
den gesamten STring vergleicht.
Gruß Marcus