gpt4 book ai didi

c++ - 删除功能无法正常工作

转载 作者:搜寻专家 更新时间:2023-10-31 01:48:39 24 4
gpt4 key购买 nike

我的删除功能正在运行。假设我将“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;
}

最佳答案

我看到的几个问题:

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

关于c++ - 删除功能无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17503761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com