删除功能无法正常工作
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 然后你应该有单独的帮助函数,在插入而不是删除项目时使用。删除项目时需要更改该行;否则你会遇到我在底部描述的问题。以上是关于删除功能无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
加入 Dataframe 的相同列后,Drop 功能无法正常工作