我對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