Вывести те слова, в которых все символы разные - 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есть незавершенная строка кода, которая начинается с/*...*/и заканчивается на/*...*/.