Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству в слове Нет повторяющихся букв

Решение задачи: «Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству»

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <limits.h>
 
int unique_letters(const char * s) {
    int counters[UCHAR_MAX + 1] = { 0 };
    
    for ( ; *s; ++s ) {
        if ( counters[(unsigned)*s] )
            return 0;
        counters[(unsigned)*s]++;
    }
    
    return 1;
}
 
void func(char * s, const char * delim) {
    static char * first = NULL;
    
    if ( s ) {
        if ( ! ( first = strtok(s, delim) ) )
            return;
        func(NULL, delim);
    }
    else {
        if ( ! ( s = strtok(NULL, delim) ) )
            return;
        if ( strcmp(s, first) && unique_letters(s) )
            printf("%s\n", s);
        func(NULL, delim);
    }
}
 
#define DELIM " \t\n"
 
int main(void) {
    char buf[BUFSIZ];
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' )
        func(buf, DELIM);
    
    return 0;
}

Объяснение кода листинга программы

  1. Программа начинается с функции main, которая считывает строку из стандартного ввода до тех пор, пока не встретит символ новой строки.
  2. Функция func вызывается для каждой строки, полученной в качестве входного параметра.
  3. Если строка пустая, то функция прекращает свою работу.
  4. В противном случае, функция ищет первое непустое поле в строке и добавляет его в начало строки.
  5. Затем функция вызывает саму себя рекурсивно для оставшейся части строки.
  6. Если строка пустая, то функция прекращает свою работу.
  7. В противном случае, функция проверяет, является ли текущее слово уникальным (не равным первому слову) и удовлетворяет ли оно условию (не содержит повторяющихся букв).
  8. Если слово удовлетворяет обоим условиям, то оно выводится на экран.
  9. Функция main использует функцию printf для вывода сообщения String: и считывает строку с помощью fgets.
  10. Если строка не пустая, то она передает ее в функцию func.
  11. Если строка пустая, то программа завершается.

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


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

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

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