Напечатать только те слова, буквы в которых упорядоченны по алфавиту - 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; }
Объяснение кода листинга программы
- В начале определяются три функции: is_sorted, word_end и main.
- Функция is_sorted проверяет упорядоченность букв в строке. Она проходит по всем символам строки, начиная с первого, и сравнивает текущий символ с последующим. Если текущий символ больше следующего, функция возвращает 0, иначе возвращает 1.
- Функция word_end находит последнее слово в строке. Она начинает с последнего символа строки и двигается назад до тех пор, пока не встретит не букву или не достигнет начала строки. После этого она возвращает указатель на первое непропущенный символ слова.
- В функции main создается строка s, содержащая список слов. Затем функция word_end вызывается для получения указателя на последнее слово в строке.
- Затем функция strtok вызывается для разделения строки на слова. Она ищет слова, разделенные запятыми и пробелами, и сохраняет их в переменной p.
- Затем проверяется, является ли текущее слово (p) последним словом в строке (w). Если это не так и слово (p) упорядочено (is_sorted), оно выводится на экран с помощью функции puts.
- Затем цикл продолжается, пока не будут обработаны все слова в строке.
- В конце программы функция main возвращает 0, указывая на успешное выполнение.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д