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

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

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

Добрый вечер. Сижу и пытаюсь разобраться с заданием. "Дана последовательность, содержащая до 5 слов, в каждом из которых до 5 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом — точка. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: буквы слова упорядочены по алфавиту" Если не будет трудно объяснить алгоритм работы, или дать код, для тщательного разбора.

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
//проверка букв-слова на упорядоченость
static int is_sorted(const char* s){
    for(;*s && *(s + 1); ++s){
        if(*s > *(s + 1))
            return 0;
    }
    return 1;
}
 
//получить последнее слово
static char* word_end(char* s){
    char* i, *p = s + (strlen(s) - 1);
    while((p >= s) && ! isalpha(*p))
        --p;
    if(isalpha(*p)){
        for(i = p; (i >= s) && isalpha(*i); --i)
            ;
        *i++   = '\0';
        (*++p) = '\0';
        p = i;
    }
    return p;
}
 
 
int main(void){
    char* p, *w;
    char s[] = "app, abc, app, xyz, wolf, app.";
    
    w = word_end(s);
    p = strtok(s, "., ");
    do {
        if(strcmp(p, w) != 0 && is_sorted(p))
            puts(p);
    } while((p = strtok(NULL, "., ")) != NULL);
    return 0;
}

Объяснение кода листинга программы

  1. В начале определяются три функции: is_sorted, word_end и main.
  2. Функция is_sorted проверяет упорядоченность букв в строке. Она проходит по всем символам строки, начиная с первого, и сравнивает текущий символ с последующим. Если текущий символ больше следующего, функция возвращает 0, иначе возвращает 1.
  3. Функция word_end находит последнее слово в строке. Она начинает с последнего символа строки и двигается назад до тех пор, пока не встретит не букву или не достигнет начала строки. После этого она возвращает указатель на первое непропущенный символ слова.
  4. В функции main создается строка s, содержащая список слов. Затем функция word_end вызывается для получения указателя на последнее слово в строке.
  5. Затем функция strtok вызывается для разделения строки на слова. Она ищет слова, разделенные запятыми и пробелами, и сохраняет их в переменной p.
  6. Затем проверяется, является ли текущее слово (p) последним словом в строке (w). Если это не так и слово (p) упорядочено (is_sorted), оно выводится на экран с помощью функции puts.
  7. Затем цикл продолжается, пока не будут обработаны все слова в строке.
  8. В конце программы функция main возвращает 0, указывая на успешное выполнение.

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


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

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

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