2012-03-29 8 views
0

私は宿題のための簡単なスペルチェックプログラムを書こうとしています。基本的には、80,000語の辞書を配列に入れてから、その単語が配列内にあるかどうかをバイナリ検索します。バイナリ検索メソッドを記述すると、配列内に単語が見つかったときに1(真)を返すのに苦労します。 [Homework}

私は問題は、最初のif文で行い、ブレークして1行返すことですが、間違っている可能性があります。私がしようとしているのは、配列の中点の単語が文字列と同じなら、if文とwhileループから抜け出し、同じでなければ1を返すようにすることです私はそれを続けて欲しい。

現在、プログラムを実行するたびに、単語が実際に辞書に入っているかどうかにかかわらず、単語が見つからないと表示されます。

私が間違っているところについての助けがあれば大歓迎です。

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

「辞書」の定義はできますか?問題はそれが 'char * dictionary []'でなければならないことを意味しますが、あなたの使用法は 'char dictionary []'を意味します。 –

+0

私はこれを次のように定義しました:string dictionary [NUMBEROFDICTIONARYWORDS]; –

+0

そして、def char string [9]とタイプします。 –

答えて

3

midPointWord[9] = dictionary[midPoint];それが配列の最後を過ぎているので、この場合にのみ行うには無効なものであるmidPointWordのインデックス9を、割り当てられます。私はdictionarychar**のようなものだと推測しています。その場合、midPointWordをchar*と宣言したいと思います。

+2

@Matt:さらに、 'midPointWord [9] = dictionary [midPoint];'は単語全体をコピーしません - 割り当てを使って配列をコピーするためのCの簡単なメカニズムはありません。 (あなたはコピーを望ましくない_anyway_;これはあなたがまだこれを経験していない場合の警告です) – sarnold

+0

ありがとう、私の部分で非常にばかげたミス!ちなみに、私がmidPointWord = dictionary [midPoint]に変更した場合、それは働くだろうか? –

+1

@MattHarris、midPointWordのタイプも変更せずに修正することはできません。 C言語で配列の内容をコピーするための "組み込み"の構文はありません。配列の内容をコピーする 'memcpy'という標準ライブラリ関数がありますが、この場合はポインタを使ってコピーすることはできません。 – meastham

関連する問題