1

私が書いているプログラムの一部では、テキストファイルを検索して、ファイルに特定の単語が存在するかどうかを確認する必要があります。存在する場合は、それを画面に印刷します。次のように、forループを使用して文字列を比較するのはなぜですか。

int in_dictionary(char dict[][8], char word[], int size) {
int i;

for (i = 0; i<size; i++)
    if (strcmp(word, dict[i]) == 0){
        return 0;
    }
    else{
        return 1;
    }

}

私のために働いていませんか?

4

2 に答える 2

6

辞書の最初の単語と検索している単語を比較しているだけです。すべての単語を比較した後にのみ失敗を返す必要があります。

for(...) {
    if(dict[i] matches)
        return MATCH;
}
return NO_MATCH;

また、戻り値は逆です。通常、失敗 (一致なし) を示すには 0 を返し、成功 (一致) を示すには 1 を返します。その例外は、main()慣例による関数と、多くの POSIX システム コール (成功の場合は 0 を返し、失敗の場合は -1 を返します) です。

于 2012-10-10T17:49:49.423 に答える
2

strcmp()返された場合0は、一致が見つかったことを意味します。その際、 a 1and notを返す必要があります0。また、strcmp()返さ1れた場合は、辞書内の現在の要素が検索文字列と一致しなかったことを意味します。その時点で一致が辞書に存在しないと結論付けることはできません。後で来る可能性があります。したがって、検索文字列を辞書内のすべての要素と比較し、一致するものが見つからない場合にのみ、検索文字列が辞書にないと結論付けることができます。

必要なもの:

for (i = 0; i<size; i++) 
    if (strcmp(word, dict[i]) == 0){
        return 1;
    }
return 0;
于 2012-10-10T17:49:54.613 に答える