私はCプログラミングにはかなり新しいですが、それを理解するために全力を尽くしています。私は2つのプレーンテキストファイルから読み込まれた2つの動的文字列を持っています。 1つは辞書の形式であり、もう1つはユーザー入力です。私が得たいのは、辞書内の各ユーザ入力単語をバイナリ検索し、それが存在するかどうかを調べることです(推測するスペルチェッカーの一種)。バイナリ検索、strcmp 2つのC言語の文字列の動的配列
両方dictElem
と
inputElem
char **dictElem;
int dictSize;
char **inputElem;
int binsearch(const char *val){
int pos;
int beg=0;
int end=dictSize-1;
int cond=0;
while (beg<=end){
pos=(beg+end)/2; //Jump in the middle
if ((cond=strcmp(dictElem[pos],val)) == 0)
return pos;
else if (cond<0)
beg=pos+1;
else
end=pos-1;
}
return 0;
}
がすでに他の方法で読み取られたとの両方の[0]要素が等しい文字列"aa"
がある(のは言わせて):
は、私は私のバイナリ検索機能にこだわっています。
私はbinsearch(inputElem[0]
を実行した後、しかし、それは常に私がちょうどstrcmp(dictElem[0],inputElem[0])
を試してみました、それは私が間違っているつもりです。1.
を返します0を返しますか?それはchar **とchar *を比較していますか?
UPD:ユーザーファイルを読み込むdictElem
void readd(FILE *file){
int i=0,size=0; /* local size */
char line[1024]; /* Local array for a single word read */
printf("Loadingn dict...\n");
while ((fgets(line,sizeof(line),file))!=NULL){
dictElem=(char**)realloc(dictElem,(size+1)*sizeof(char *));
dictElem[size++]=strdup(line);
}
printf("Total elements loaded: %d\n",size);
}
機能をロードしています 機能はほんの少し異なるフォーマット、非常によく似ています。
文字列に正しく移動する場合、整数の配列に対してソート関数を実行してみてください。 –
'dictElem'と' val'をどこに割り当てているのかわかりますか? –
また、バイナリツリーがないため、ソートされた配列なので、このアルゴリズムは "バイナリ検索"ではなく "バイナリ検索"と呼ばれます。 –