2012-03-29 2 views
0

Ich versuche, eine einfache Rechtschreibprüfung Programm für Hausaufgaben zu schreiben, im Grunde, indem Sie ein Wörterbuch von 80.000 Wörtern in ein Array und dann eine binäre Suche, um zu sehen, ob das Wort im Array ist.Eine binäre Suchmethode schreiben, die Mühe hat, 1 (wahr) zurückzugeben, wenn ein Wort in einem Array gefunden wird. [Hausaufgaben]

Ich glaube, das Problem ist mit der ersten if-Anweisung zu tun, mit meiner Pause und 1 Zeilen zurück, aber ich kann falsch liegen. Was ich versuche zu tun, ist es so zu machen, dass wenn das Wort am Mittelpunkt des Arrays dasselbe ist wie die Zeichenkette, es aus der if-Anweisung und der while-Schleife ausbrechen und 1 zurückgeben sollte, wenn es nicht das gleiche ist Ich möchte, dass es weiter sucht.

Derzeit jedes Mal, wenn ich das Programm ausführen sagt es das Wort nicht gefunden wird, ob das Wort tatsächlich im Wörterbuch oder nicht ist.

Jede Hilfe mit, wo ich falsch gehe, wird sehr geschätzt.

int binarySearch(char string[9]) { 
    int low = 0; 
    int high = NUMBEROFDICTIONARYWORDS; 
    int midPoint; 
    char midPointWord[9]; 

    while(high > (low + 1)) { 

    midPoint = (low + high)/2; 
    midPointWord[9] = dictionary[midPoint]; 

    if(strcmp(string, midPointWord) == 0) { 
    return 1; 
    break; 
    break; 
    } else 
    if(strcmp(string, midPointWord) < 0) { 
    high = midPoint; 
    } else 
    low = midPoint; 
    } 

    return 0; 

} 
+0

Können Sie Ihre Definition für 'dictionary' angeben? Das Problem impliziert, dass es 'char * dictionary []' sein sollte, aber Ihre Verwendung impliziert, dass es 'char dictionary []' ist. –

+0

Ich habe es so definiert: String-Wörterbuch [NUMBEROFDICTIONARYWORDS]; –

+0

Und geben Sie def char Zeichenfolge [9]; –

Antwort

3

midPointWord[9] = dictionary[midPoint]; weist nur Index 9 von midPointWord, die in diesem Fall ist eine ungültige Sache zu tun, weil es über das Ende des Arrays ist. Ich denke, dictionary ist so etwas wie ein char**, in diesem Fall möchten Sie MidPointWord als char* deklarieren.

+2

@Matt: Beachten Sie, dass 'midPointWord [9] = dictionary [midPoint];' das ganze Wort nicht kopiert - es gibt keinen "einfachen" Mechanismus in C, um ein Array über Zuweisung zu kopieren. (Sie wollen nicht die Kopie _anyway_; das ist nur eine Warnung, falls Sie dies noch nicht erlebt haben.) – sarnold

+0

Danke, ein sehr dummer Fehler meinerseits! Übrigens, wenn ich es ändern sollte, um MidPointWord = Dictionary [MidPoint]; Würde es funktionieren? –

+1

@MattHarris, das würde es nicht beheben, ohne auch den Typ von MidPointWord zu ändern. Es gibt keine "eingebaute" Syntax zum Kopieren von Array-Inhalten in C. Es gibt eine Standard-Bibliotheksfunktion namens "memcpy", die Array-Inhalte kopiert, aber Sie können in diesem Fall das Kopieren vermeiden, indem Sie Zeiger verwenden. – meastham

Verwandte Themen