Вывести те слова, в которых все символы разные - C (СИ)
Формулировка задачи:
дано массив слов, и в каждом слове от 1 до 8 символов. Вывести те слова, в которых все символы разные
Решение задачи: «Вывести те слова, в которых все символы разные»
textual
Листинг программы
/*...*/ unsiged char COUNTERS[UCHAR_MAX + 1]; int unique(const char * s) { return ( *s == '\0' ) ? 1 : ( COUNTERS[(unsigned char)(*s)]++ ) ? 0 : unique(s + 1); } int main(void) { /*...*/ memset(COUNTERS, 0, UCHAR_MAX + 1); printf("%s", ( unique(some_tested_string) ) ? "YES" : "NO"); /*...*/ }
Объяснение кода листинга программы
В этом коде:
- Объявлена массивная переменная
COUNTERS
типаunsigned char
с размеромUCHAR_MAX + 1
. При этомUCHAR_MAX
- это максимальное значение, которое может хранить типunsigned char
. - Далее определена функция
unique
, которая принимает на вход указатель на строкуs
и возвращает 1, если все символы в строке уникальны, и 0 в противном случае. При первом вызове функцииunique
ей передается первый символ строкиs
. Если этот символ является нулевым (т.е. строка закончилась), функция возвращает 1. Если нет, то она увеличивает счетчик в соответствующей ячейке массиваCOUNTERS
и рекурсивно вызывает саму себя, передавая в качестве аргументаs + 1
(т.е. следующий символ в строке). Если все символы в строке уникальны, функция возвращает 1, иначе - 0. - В функции
main
сначала инициализируют все ячейки массиваCOUNTERS
нулями с помощью функцииmemset
. - Затем вызывается функция
unique
с аргументомsome_tested_string
(который в коде не указан, но должен быть заменен на конкретную строку для проверки). Результат работы функцииunique
сохраняется в переменной. - И наконец, с помощью функции
printf
выводится на экран строкаYES
, если все символы в строке уникальны, иNO
в противном случае. - В конце функции
main
есть незавершенная строка кода, которая начинается с/*...*/
и заканчивается на/*...*/
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д