我对C编程相当陌生,但尽力了解它。我有两个从两个纯文本文件填充的动态字符串。一种是字典的形式,另一种是用户输入。我想要得到的是二进制搜索词典中的每个用户输入词,并确定它是否存在(我猜想有点拼写检查)。二进制搜索,strcmp中两个字符串的动态数组C
我卡在我的二进制搜索功能:
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"
。
我运行后,但是它总是返回0。binsearch(inputElem[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);
}
功能,读取用户文件非常相似,只是有点不同的格式。
尝试在整数数组上运行排序函数,如果它能正常工作,则转到字符串。 – 2012-04-01 19:02:41
你能告诉我们代码你在哪里分配'dictElem'和'val'吗? – 2012-04-01 19:04:25
此外,该算法被称为“二进制搜索”,而不是“二进制TREE搜索”,因为没有二叉树,只是一个有序的数组。 – 2012-04-01 20:29:43