Удалить из строки все повторные вхождения букв - C (СИ)
Формулировка задачи:
2. Дана строка символов до точки. Удалить из нее все повторные вхождения букв.
Решение задачи: «Удалить из строки все повторные вхождения букв»
textual
Листинг программы
#include <stdio.h> #include <string.h> void delete_word(char *line, int del_index) { int i; const int ln = strlen(&line[0]); for (i = del_index; i < ln-1; ++i) line[i] = line[i+1]; line[ln-1] = ' '; } int main(int argc, const char * argv[]) { char line[] = "enoo owwwt eerht ruof eviif xxis"; int i; for (i = 1; i < strlen(&line[0]); ++i) { if (line[i] == line[i-1] && line[i] != ' ') { delete_word(&line[0], i); i--; } } printf("%s", &line[0]); return 0; }
Объяснение кода листинга программы
Вывод: В данном коде реализована функция delete_word
, которая удаляет из строки все повторные вхождения букв. В функции main
создаётся строка enoo owwwt eerht ruof eviif xxis
и проходится по всем её символам, начиная со второго. Если текущий символ равен предыдущему и он не является пробелом, то вызывается функция delete_word
, которая удаляет этот символ из строки. В конце программа выводит изменённую строку.
Обоснование:
- В функции
delete_word
объявлена функция, которая принимает указатель на строку и индекс первого вхождения символа, который нужно удалить. - В функции
main
создаётся массив символовenoo owwwt eerht ruof eviif xxis
и инициализируется строкой. - Далее в цикле проходится по всем символам строки, начиная со второго.
- Если текущий символ равен предыдущему и он не является пробелом, то вызывается функция
delete_word
, которая удаляет этот символ из строки. При этом значение переменнойi
уменьшается на 1, чтобы пропустить уже удалённый символ. - В конце программы вызывается функция
printf
, которая выводит изменённую строку. - Значение переменной
argc
и аргументы функцииmain
не используются в данном коде, поэтому они могут быть не предоставлены.