我有2個函數。函數查找並執行雙向搜索,意味着它按部分搜索數組,直到找到該鍵並返回其位置。函數removef或(快速移除)抓取該位置並將其從字符串數組中移除。我正在使用一個命令行界面,要求用戶輸入一個命令和一個字符串(被刪除的字符串),因此不需要提示用戶輸入字符串。使用雙向搜索從陣列中刪除字符串
這是我的查找功能
int StringList::Find(string key, int start, int end)
{
int middle = (end + start)/2;
if (key > str[middle])
{
return Find(key,middle,end);
}
else if (key < str[middle])
{
return Find(key,start,middle);
}
else if (key == str[middle])
{
return middle;
}
}
查找功能應該確定密鑰是否是在該陣列的上段或下段(在中部以上或低於中間),則保持分裂,直到找到它需要刪除的密鑰或字符串。
這裏是removef:
void StringList::removef(string s)
{
int loc = Find(s,0,10000); //ignore these parameters, i know they are wrong they are just an example
for(int j=loc; j<(numberOfStrings)-1; j++)
{
str[j] = str[j+1];
}
numberOfStrings--;
}
我的問題是使用雙截面搜索我的查找功能。任何我可以修復的建議?我真的陷入困境。謝謝!
可能是一個愚蠢的問題,但你的數組排序?另外,如果字符串不在數組中,你的Find函數將不起作用。 –
@TaylorBrandstetter是的,它是按字母順序排序的另一個功能。至於發現不工作,我只會添加一個if語句,表明它是否不返回-1。如果-1它將打印「字符串不存在」 – WestonBuckeye
在這種情況下,我會檢查它確實是在調用Find函數時排序的。你的代碼適用於我的排序數組。 –