Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству - 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;
}
Объяснение кода листинга программы
- Программа начинается с функции
main, которая считывает строку из стандартного ввода до тех пор, пока не встретит символ новой строки. - Функция
funcвызывается для каждой строки, полученной в качестве входного параметра. - Если строка пустая, то функция прекращает свою работу.
- В противном случае, функция ищет первое непустое поле в строке и добавляет его в начало строки.
- Затем функция вызывает саму себя рекурсивно для оставшейся части строки.
- Если строка пустая, то функция прекращает свою работу.
- В противном случае, функция проверяет, является ли текущее слово уникальным (не равным первому слову) и удовлетворяет ли оно условию (не содержит повторяющихся букв).
- Если слово удовлетворяет обоим условиям, то оно выводится на экран.
- Функция
mainиспользует функциюprintfдля вывода сообщенияString:и считывает строку с помощьюfgets. - Если строка не пустая, то она передает ее в функцию
func. - Если строка пустая, то программа завершается.