Дано предложение. Удалить из каждого слова повторяющиеся буквы - 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 указывает на предыдущий символ. Алгоритм работы функции следующий:

  1. Проходим по каждому символу в строке.
  2. Если символ является буквой, то:
    • Преобразуем символ в верхний регистр.
    • Вычисляем номер буквы в алфавите (с учетом регистра).
    • Проверяем, была ли уже в этой позиции буква. Если нет, то:
      • Запоминаем текущий символ в позиции.
      • Перемещаем указатель t на позицию следующего символа.
  3. Если символ не является буквой, то:
    • Перемещаем указатель t на позицию следующего символа.
  4. Возвращаем новую строку, начиная с позиции t. В функции main создается тестовая строка s, которая содержит повторяющиеся буквы. Затем выводится исходная строка, после чего выводится строка, полученная с помощью функции unique_abc. Данный код работает только с символами ASCII. Если в строке будут присутствовать символы, не входящие в диапазон ASCII, то они не будут корректно обработаны.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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