Как удалить повторяющиеся подряд символы из памяти? Язык С
Допустим, есть строка aaabcde, а нужно чтобы было abcde. Я реализовала код, который работает, но есть ли какие-нибудь функции или библиотеки, которые помогут именно удалить из строки символ? Ни циклом, ни принтами, ни созданием нового массива, а именно был массив char stroka[7] = "aaabcde", а стала char stroka[5] = "abcde"? Буду благодарна, если подскажите или намекнете, где можно почитать об этом. Находила информацию об этом, точнее реализацию на языке с++, но на с не смогла найти, возможно, плохо искала(
P.S. не ругайтесь, пожалуйста, если я путаю термины "массив" и "строка", я новичок.
Ответы (1 шт):
Полагаю, что требование изменения типа переменной - это всё-таки отсебятина, а требовалось сжать строку на месте. Для этого можно пройти по строке циклом, на каждом шаге проверяя, не совпадает ли текущий символ с начальным символом последовательности. Если нет - то сдвинуть индекс начала и переписать символ на его окончательное место. В конце работы записать нулевой символ после оставшихся, чтобы строковые функции 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