У меня есть массив строк в C и целое число, указывающее, сколько строк в массиве.Как удалить повторяющиеся строки из массива в 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 скользил вниз, чтобы заполнить этот пробел.
У меня есть идея, как это сделать. Он непроверен, и я в настоящее время пытаюсь его кодировать, но только из моего слабого понимания, я уверен, что это ужасный алгоритм.
Алгоритм, представленный ниже, будет запускаться каждый раз, когда новая строка будет добавлена в strarray.
Для интереса, показывая, что я пытаюсь, я буду включать предлагаемый мой алгоритм ниже:
- Поиска всей strarray для матча ул
- Если не подходит, ничего не делать
- Если матч найден , поставить ул в strarray
- Теперь у нас есть strarray с максами входа 1 дубликата
- Добавить высокий индекс strarray строки низкого индекса временных массива строк
- Продолжить вниз в strarray и проверить каждый элемент
- Если дубликат найден, пропустите его
- Если нет, добавьте его к следующему самому высокому индексу временного массива строк
- Reverse массив строк временного и скопировать strarray
Еще раз, это не проверено (я сейчас его реализую). Я просто надеюсь, что у кого-то будет намного лучшее решение.
Порядок элементов важен, и код должен использовать язык C (а не C++). Самые низкие дубликаты индексов должны быть удалены и сохранен один самый высокий индекс.
Спасибо!
не сортировал бы порядок элементов? –
@Jerry: Ответ отредактирован. –
Спасибо за ваше редактирование! Я немного ржавый по сортировке, но я могу взять это отсюда. Я собираюсь попробовать вашу идею и посмотреть, как хорошо она работает. Из того, что я понимаю, мне нужно итерировать strarray, создавая временный массив tempUniqueEntry в этом процессе. Сортировка tempArray по строке, удаление дубликатов, сортировка tempArray по позиции, а затем восстановление strarray. Верный? –