Удалить из строки все повторные вхождения букв - 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, которая удаляет этот символ из строки. В конце программа выводит изменённую строку. Обоснование:

  1. В функции delete_word объявлена функция, которая принимает указатель на строку и индекс первого вхождения символа, который нужно удалить.
  2. В функции main создаётся массив символов enoo owwwt eerht  ruof eviif xxis и инициализируется строкой.
  3. Далее в цикле проходится по всем символам строки, начиная со второго.
  4. Если текущий символ равен предыдущему и он не является пробелом, то вызывается функция delete_word, которая удаляет этот символ из строки. При этом значение переменной i уменьшается на 1, чтобы пропустить уже удалённый символ.
  5. В конце программы вызывается функция printf, которая выводит изменённую строку.
  6. Значение переменной argc и аргументы функции main не используются в данном коде, поэтому они могут быть не предоставлены.

Оцени полезность:

10   голосов , оценка 3.6 из 5
Похожие ответы