Удалить функцию не работает должным образом

Моя функция удаления действует. Скажем, если я добавлю «Apple», «Boy», «Cat» в мой массив. Сортирует это по алфавиту. Когда я что-то удаляю, скажем «Мальчик», это удаляет это нормально. Но если я введу «Браун», это удалит «Кот» из моего списка. Он всегда удалит тот, что находится под ним в алфавитном порядке, если он не найдет его в списке. Если у меня есть те строки, которые я указал выше, и я ввожу в «Собака», ничего не происходит, потому что «Кошка» перед «Собака». Есть идеи?

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;
}

2

Решение

Я вижу пару проблем:

В 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» …

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]