Найти в строке и удалить из нее последовательности повторяющихся символов - C (СИ)
Формулировка задачи:
Найти в строке и удалить из нее последовательности повторяющихся символов
(например, "abcxxxxxacbyyyyyyyyyyyyyyyz" - "abcacbz")
Решение задачи: «Найти в строке и удалить из нее последовательности повторяющихся символов»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
void del(char* );
int main()
{
char str[BUFSIZ];
puts("Input line:");
fgets(str, BUFSIZ, stdin);
del(str);
puts(str);
return 0;
}
void del(char* p)
{
char *a = p, *b = p + 1;
while(*b){
while(*b && *b++ != *a)
*p++ = *a++;
while(*b && *b++ == *a);
a = b - 1;
}
*p = '\0';
}
Объяснение кода листинга программы
В этом коде реализована функция удаления повторяющихся символов из строки. Список действий:
- Ввод строки с помощью функции fgets в буфер str, размер которого определяется макросом BUFSIZ.
- Вывод строки на экран.
- Вызов функции del с передачей в неё указателя на начало строки (str).
- В функции del создаются два указателя: a указывает на текущий символ, b- на следующий.
- В цикле while считывается текущий символ и проверяется, совпадает ли он с предыдущим. Если да, то он пропускается, если нет- копируется в выходную строку.
- После окончания цикла, последний символ добавляется в выходную строку.
- Выходная строка выводится на экран.
- Возвращается 0, заканчивая работу функции main.