Проверить, во всех ли словах буквы расположены в алфавитном порядке - C (СИ)
Формулировка задачи:
Решение задачи: «Проверить, во всех ли словах буквы расположены в алфавитном порядке»
- #include <stdio.h>
- #include <limits.h>
- #include <string.h>
- int is_ordered(const char * s) {
- return ( ! *s ) ? INT_MAX : ( *s < is_ordered(s + 1) ) ? *s : 0;
- }
- #define DELIM " \t\n"
- int main(void) {
- char buf[BUFSIZ], * p;
- while ( printf("\nString: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' && printf("Unordered words: ") )
- for ( p = strtok(buf, DELIM); p; p = strtok(NULL, DELIM) )
- if ( ! is_ordered(p) )
- printf("%s ", p);
- return 0;
- }
Объяснение кода листинга программы
В этом коде представлена функция is_ordered
, которая принимает строку и возвращает значение, указывающее, являются ли все буквы в строке упорядоченными (в порядке возрастания). Если первая буква не является 'a', то она возвращает INT_MAX
. В противном случае она рекурсивно вызывает саму себя с аргументом s + 1
до тех пор, пока не будет найдена первая несопоставимая буква (которая больше текущей). Если таковая найдена, функция возвращает ее значение. Если все буквы в строке упорядочены, функция возвращает 0.
В функции main
используется стандартный ввод для получения строки от пользователя. Затем эта строка разбивается на слова с использованием функции strtok
и условного оператора while
. Если слово не упорядочено (т.е. функция is_ordered
возвращает значение, отличное от 0), оно выводится на экран с помощью функции printf
.
Список переменных и их значений:
buf
- массив символов, используемый для хранения строки, введенной пользователемp
- указатель на текущее слово в строкеDELIM
- строка, используемая для разбиения строки на слова (пробел, табуляция, символ новой строки)is_ordered
- функция, проверяющая, являются ли все буквы в слове упорядоченнымиINT_MAX
- максимальное значение, которое может быть возвращено функциейis_ordered
в случае, если первая буква не является 'a'printf
- функция, используемая для вывода информации на экранfgets
- функция, используемая для чтения строки из стандартного вводаstrtok
- функция, используемая для разбиения строки на слова
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д