У меня есть массив строк в C и целое число, указывающее, сколько строк в массиве.
char *strarray[MAX];
int strcount;
В этом массиве самый высокий индекс (где 10 больше 0) является самымдобавлен последний элемент, а самый низкий индекс - самый удаленный элемент. Порядок элементов в массиве имеет значение.
Мне нужен быстрый способ проверить массив на наличие дубликатов, удалить все, кроме самого высокого индекса дубликата , и свернутьмассив.
Например:
strarray[0] = "Line 1";
strarray[1] = "Line 2";
strarray[2] = "Line 3";
strarray[3] = "Line 2";
strarray[4] = "Line 4";
станет:
strarray[0] = "Line 1";
strarray[1] = "Line 3";
strarray[2] = "Line 2";
strarray[3] = "Line 4";
Индекс 1 исходного массива удален, а индексы 2, 3 и 4 смещены внизчтобы заполнить пробел.
У меня есть одна идея, как это сделать.Он не проверен, и в настоящее время я пытаюсь его закодировать, но только из-за своего слабого понимания, я уверен, что это ужасающий алгоритм.
Алгоритм, представленный ниже, будет запускаться каждый раз, когда новая строка добавляется в страйррей..
Для того, чтобы показать, что я пытаюсь, я включу предложенный мной алгоритм ниже:
- Поиск по всему страрри для совпадения с str
- Если нет совпадения, ничего не делать
- Если совпадение найдено, поместите str в strarray
- Теперь у нас есть страррей с макс. 1 повторяющейся записью
- Добавить строковую строку с самым высоким индексом к самому низкому индексумассив временных строк
- Продолжите вниз в страррей и проверьте каждый элемент
- Если найден дубликат, пропустите его
- Если нет, добавьте его к следующему наивысшему индексу массива временных строк
- Перевернуть временный строковый массив и скопировать в strarray
Еще раз, это не проверено (сейчас я его реализую).Я просто надеюсь, что у кого-то найдется гораздо лучшее решение.
Порядок элементов важен, и код должен использовать язык C (не C ++).Дубликаты самого низкого индекса должны быть удалены, а единственный самый высокий индекс должен быть сохранен.
Спасибо!