私には2つの機能があります。関数 Find は 2 セクション検索を実行します。つまり、キーが見つかるまでセクションごとに配列を検索し、その場所を返します。関数 removef または (remove fast) はその場所を取得し、文字列配列から削除します。ユーザーにコマンドと文字列 (文字列は削除されます) を入力するように求めるコマンド ライン インターフェイスを使用しているため、ユーザーに文字列の入力を求める必要はありません。
ここに私の検索機能があります
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;
}
}
Find 関数は、キーが配列の上部セクションまたは下部セクション (中央の上または中央の下) にあるかどうかを判断し、削除する必要があるキーまたは文字列が見つかるまで分割を続けることになっています。
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--;
}
私の問題は、二分検索を使用した検索機能にあります。私が修正できる何か提案はありますか?私は本当に立ち往生しています。ありがとう!