Удалить идентичные, последовательные строки в массиве символов в C - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь создать функцию, которая будет определять наличие последовательных строк в массиве символов, которые идентичны.

Например, если массив символов содержит:

Hi

Hello

Hello

Hello

Привет

тогда массив будет изменен на

Привет

Привет

По сути, я хочуНайдите последовательные идентичные строки и удалите их, чтобы осталась только одна из них.Если одна строка идентична предыдущей строке, но они не являются последовательными, то это нормально.

Действительно, вся строка не должна быть идентичной, но по крайней мере первые 79, или MAXCHARS, имеютбыть идентичным.

Кроме того, я не хочу делать это, записывая в промежуточный файл.В идеале я бы вместо этого хранил данные в массивах.

Я думал что-то вроде:

    int deleteRepeats(char *a)
 {
         int i;
          for (i=0; i<=MAXCHARS; i++) {
          if (a[i] != '\n')
              /* copy into new array /*
        }
 }

но я несколько растерялся.Я не хочу печатать массив прямо сейчас, потому что я буду изменять его позже в моей программе;Мне все еще нужно использовать.

Любая помощь / решение с благодарностью.Спасибо.

1 Ответ

0 голосов
/ 26 апреля 2018

Некоторые рекомендации:

  • Вы можете копировать каждый символ максимум один раз - назад, к месту назначения.Нет необходимости в дополнительных копиях.
  • У вас будет позиция "окончательно до конца" в массиве и позиция "обрабатывается / читается".
  • Отслеживайте текущую полнуюстрока, которая может быть дублирована, и сопоставьте каждую новую строку с ней, чтобы проверить, не является ли она дублированием.
  • Переход по полным строкам, а не по символам - за исключением случаев поиска следующего конца строки.
...