删除功能无法正常工作

Posted

技术标签:

【中文标题】删除功能无法正常工作【英文标题】:Remove function not working properly 【发布时间】:2013-07-06 14:13:09 【问题描述】:

我的删除功能正在发挥作用。假设我将“Apple”、“Boy”、“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】:

我看到的几个问题:

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”的原因是搜索方法中的字典“大于”操作。当你给它“Brown”时,它会看到“Cat”并说,嘿! “猫”>“棕色”!让我们返回“猫”的索引!然后 remove 方法会,嗯,删除“Cat”...

【讨论】:

如果我调整 str[i]>=s 它不会按字母顺序添加它们。我刚刚在我的功能中尝试过。我必须使用顺序搜索来找到插入点,以按字母顺序将字符串添加到我的列表中。 @GiBiT09 然后你应该有单独的帮助函数,在插入而不是删除项目时使用。删除项目时需要更改该行;否则你会遇到我在底部描述的问题。

以上是关于删除功能无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

拖放无法正常工作(dnd_stop)

更改datetimepicker上的功能无法正常工作

加入 Dataframe 的相同列后,Drop 功能无法正常工作

Javascript事件奇怪的行为,removeEventListener无法正常工作

Bigquery 重复数据删除查询无法正常工作

NSManagedObject 删除无法正常工作