Проверить, во всех ли словах буквы расположены в алфавитном порядке - 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- функция, используемая для разбиения строки на слова