私はCプログラミングにかなり慣れていませんが、それを理解するために最善を尽くしています. 2 つのプレーン テキスト ファイルから入力された 2 つの動的文字列があります。1 つは辞書の形式で、もう 1 つは単なるユーザー入力です。私が取得したいのは、辞書内の各ユーザー入力単語をバイナリ検索し、それが存在するかどうかを調べることです (一種のスペルチェッカーだと思います)。
私は二分探索関数で立ち往生しています:
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;
}
dictElem
との両方inputElem
が既に他の方法で読み取られており、(たとえば) 両方の [0] 要素が等しい string"aa"
です。
ただし、実行した後はbinsearch(inputElem[0]
常に0が返されます。試してみたところstrcmp(dictElem[0],inputElem[0])
、1が返されます。
どこが間違っていますか?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);
}
ユーザーファイルを読み取る関数は非常に似ていますが、形式が少し異なります。