Как удалить повторяющиеся подряд символы из памяти? Язык С

Допустим, есть строка aaabcde, а нужно чтобы было abcde. Я реализовала код, который работает, но есть ли какие-нибудь функции или библиотеки, которые помогут именно удалить из строки символ? Ни циклом, ни принтами, ни созданием нового массива, а именно был массив char stroka[7] = "aaabcde", а стала char stroka[5] = "abcde"? Буду благодарна, если подскажите или намекнете, где можно почитать об этом. Находила информацию об этом, точнее реализацию на языке с++, но на с не смогла найти, возможно, плохо искала(

P.S. не ругайтесь, пожалуйста, если я путаю термины "массив" и "строка", я новичок.


Ответы (1 шт):

Автор решения: MBo

Полагаю, что требование изменения типа переменной - это всё-таки отсебятина, а требовалось сжать строку на месте. Для этого можно пройти по строке циклом, на каждом шаге проверяя, не совпадает ли текущий символ с начальным символом последовательности. Если нет - то сдвинуть индекс начала и переписать символ на его окончательное место. В конце работы записать нулевой символ после оставшихся, чтобы строковые функции C корректно обрабатывали измененную строку.

char s[100] = "aabcccdeeefgggg";
if(s) {
   int left = 0;
   int right = 1;
   while (s[right]) {
       if (s[right] != s[left])
           s[++left] = s[right];
       right++;    
   }
   s[left+1] = '\0';
   printf("%s", s);
}


>>  abcdefg
→ Ссылка