2

私の削除機能が作動しています。「Apple」、「Boy」、「Cat」を配列に追加するとします。アルファベット順に並べ替えます。何かを削除するときは、「Boy」としましょう。問題なく削除されます。しかし、「茶色」と入力すると、リストから「猫」が削除されます。リストに見つからない場合は、常にその下にあるものをアルファベット順に削除します。上記の文字列があり、「Dog」と入力すると、「Cat」が「Dog」の前にあるため、何も起こりません。何か案は?

void StringList::remove(string s)
{
    int loc = search(s, 0, numberOfStrings);
    if(loc!=-1)
    {
        for(int i=loc; i<(numberOfStrings)-1; i++)
        {
            str[i] = str[i+1];
        }
        numberOfStrings--;      
    }
}


int StringList::search(string s, int start, int end)
{
    for(int i=start; i<=end; i++)
    {
        if(str[i]>=s)
        {
            return i;
        }
    }
    return -1;
}
4

1 に答える 1

3

私が見るいくつかの問題:

ではStringList::search、行

if (str[i] >= s)

に変更する必要があります

if (str[i] == s)

辞書編集的に「より大きな」最初の文字列ではなく、正確に一致するものを見つけたいと思いますか?

次に、最初の行でStringList::remove使用する必要があります

numberOfStrings - 1

ただの代わりに

numberOfStrings

の場合、ではなくnumberOfStrings = 3インデックスで検索します。0, 1, 20, 1, 2, 3

ただし、最初の行のパラメーターを変更する代わりに、(関数内でStringList::search) 行を変更することもできます

for (int i = start; i <= end; i++)

for (int i = start; i < end; i++)

これらの修正により、アルゴリズムが機能するはずです。

「Brown」を削除して「Cat」を削除しようとする理由は、検索メソッドの辞書式の「より大きい」操作のためです。「茶色」を与えると、「猫」と表示されて、ねえ!「猫」>「茶色」!「猫」のインデックスを返してみましょう!そして、remove メソッドは「Cat」を削除します...

于 2013-07-06T14:19:38.760 に答える