删除功能无法正常工作

时间:2013-07-06 14:13:09

标签: c++ linear-search

我的移除功能正在起作用。让我们说如果我将“Apple”,“Boy”,“Cat”添加到我的阵列中。它按字母顺序排序。当我删除某些东西时,让我们说“男孩”,它会删除它。但如果我输入“Brown”,它会从我的列表中删除“Cat”。如果它没有在列表中找到它,它将始终按字母顺序删除它下面的那个。如果我有上面提到的那些字符串并且我输入“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;
}

1 个答案:

答案 0 :(得分:3)

我看到了几个问题:

StringList::search中,

if (str[i] >= s)

应改为

if (str[i] == s)

您想要找到完全匹配,而不是第一个按字典顺序排列的“更大”字符串,对吗?

接下来,StringList::remove中的第一行应该使用

numberOfStrings - 1

而不仅仅是

numberOfStrings

如果numberOfStrings = 3,则您要搜索索引0, 1, 2,而不是0, 1, 2, 3

但是,您也可以更改(在函数StringList::search中)行

,而不是更改第一行中的参数
for (int i = start; i <= end; i++)

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

使用这些修补程序,您的算法工作。

您尝试删除“Brown”并删除“Cat”的原因是因为搜索方法中的词典“大于”操作。当你给它“布朗”时,它会看到“猫”并说,嘿! “猫”&gt; “棕色”!让我们返回“猫”的索引!然后删除方法就会删除“Cat”......