Дано предложение. Удалить из каждого слова повторяющиеся буквы - C (СИ)
Формулировка задачи:
Дано предложение. Удалить из каждого слова все повторяющиеся
буквы, т.е. в каждом слове должны остаться только различные
буквы.
Решение задачи: «Дано предложение. Удалить из каждого слова повторяющиеся буквы»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> //только для ascii char* unique_abc(char* s){ unsigned int n, shf = 0; char* p = s, *t = s; for(; *s; *s = *++p){ if(isalpha(*p)){ n = (unsigned int)(toupper(*p) - 'A'); if(!((shf >> n) & 1)){ shf |= 1 << n; ++s; } } else { ++s; shf = 0; } } return t; } int main(void){ char s[] = "DDD, LISPSSS, ppeerrlll, GGGGGOOO."; puts(s); puts( unique_abc(s) ); getchar(); return 0; }
Объяснение кода листинга программы
В данном коде реализована функция unique_abc, которая принимает в качестве аргумента строку s и возвращает новую строку, в которой удалены повторяющиеся буквы. В функции используется два указателя: p указывает на текущий символ в строке, t указывает на предыдущий символ. Алгоритм работы функции следующий:
- Проходим по каждому символу в строке.
- Если символ является буквой, то:
- Преобразуем символ в верхний регистр.
- Вычисляем номер буквы в алфавите (с учетом регистра).
- Проверяем, была ли уже в этой позиции буква. Если нет, то:
- Запоминаем текущий символ в позиции.
- Перемещаем указатель t на позицию следующего символа.
- Если символ не является буквой, то:
- Перемещаем указатель t на позицию следующего символа.
- Возвращаем новую строку, начиная с позиции t. В функции main создается тестовая строка s, которая содержит повторяющиеся буквы. Затем выводится исходная строка, после чего выводится строка, полученная с помощью функции unique_abc. Данный код работает только с символами ASCII. Если в строке будут присутствовать символы, не входящие в диапазон ASCII, то они не будут корректно обработаны.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д