Дано предложение. Удалить из каждого слова повторяющиеся буквы - 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, то они не будут корректно обработаны.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д