Я довольно новичок в программировании на С, но стараюсь изо всех сил понять это. У меня есть две динамические строки, которые заполняются из двух текстовых файлов. Один из них является формой словаря, а другой - просто пользовательский ввод. То, что я хочу получить, - это двоичный поиск по каждому вводимому пользователем слову в словаре и выяснение, присутствует ли оно (вроде как проверка орфографии).
Я застрял в своей функции двоичного поиска:
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] являются одинаковыми строками "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);
}
Функция, которая читает пользовательский файл, очень похожа, только немного в другом формате.