Проверить, во всех ли словах буквы расположены в алфавитном порядке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан текст 1) Проверить, во всех ли словах буквы расположены в алфавитном порядке, вывести слова, к которым это не относится. 2) Введенный с клавиатуры символ во всем тесте заменить на символ подчеркивания Прошу помочь.

Решение задачи: «Проверить, во всех ли словах буквы расположены в алфавитном порядке»

textual
Листинг программы
#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. Список переменных и их значений:

  1. buf - массив символов, используемый для хранения строки, введенной пользователем
  2. p - указатель на текущее слово в строке
  3. DELIM - строка, используемая для разбиения строки на слова (пробел, табуляция, символ новой строки)
  4. is_ordered - функция, проверяющая, являются ли все буквы в слове упорядоченными
  5. INT_MAX - максимальное значение, которое может быть возвращено функцией is_ordered в случае, если первая буква не является 'a'
  6. printf - функция, используемая для вывода информации на экран
  7. fgets - функция, используемая для чтения строки из стандартного ввода
  8. strtok - функция, используемая для разбиения строки на слова

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы