Вывести строку, содержащую эти же слова, разделенные одним пробелом и расположенные в алфавитном порядке - C (СИ)
Формулировка задачи:
Прошу помощи в решении задачи.
Дана строка, состоящая из английских слов, набранных заглавными буквами и разделенных пробелами (одним или несколькими). Вывести строку, содержащую эти же слова, разделенные одним пробелом и расположенные в алфавитном порядке.
Решение задачи: «Вывести строку, содержащую эти же слова, разделенные одним пробелом и расположенные в алфавитном порядке»
textual
Листинг программы
#include <stdio.h> #include <ctype.h> static char* next_word(char* s, char** e); static char* swap_word(char* p1, char* e1, char* p2, char* e2, char** le); char* sort_words_abc(char* s); int main(void){ char s[] = "D python PHP COBOL Pascal ADA Lisp perl algol c basic APL Java"; puts(s); puts( sort_words_abc(s) ); return 0; } //сортировка слов по-алфавиту(ASCII) char* sort_words_abc(char* s){ char* a, *b, *f, *l, *p, *e; a = next_word(s, &b); if(a == NULL) return s; for(; *a; ){ p = a; e = b; f = b; while((f = next_word(f, &l)) != NULL){ if(toupper(f[0]) < toupper(p[0])){ p = f; e = l; } f = l; } if(p != a) a = swap_word(a, b, p, e, &b); else { a = next_word(b, &b); if(a == NULL) break; } } return s; } //выделение слова static char* next_word(char* s, char** e){ char* p; while(*s && !isalpha(*s)) ++s; p = s; while(*p && isalpha(*p)) ++p; if(p != s){ *e = p; return s; } return NULL; } //обмен слов static char* swap_word(char* p1, char* e1, char* p2, char* e2, char** le){ char* p, c; for(;p2 != e2; ++p2, ++p1, ++e1){ for(p = p2; p > p1; --p){ c = *p; *p = *(p - 1); *(p - 1) = c; } } for(--e2; p1 != e1; --e1){ for(p = p1; p < e2; ++p){ c = *p; *p = *(p + 1); *(p + 1) = c; } } *le = e1; return p1; }
Объяснение кода листинга программы
- В первой функции
main
мы имеем массив строкs
, который содержит список слов, которые нужно отсортировать по алфавиту. - Во второй функции
sort_words_abc
мы сортируем слова в массивеs
. Мы используем функцииnext_word
иswap_word
для разделения слов и их перестановки в правильном порядке. - Функция
next_word
используется для выделения слов из строки. Она проходит по строке и возвращает указатель на первое букву следующего слова, игнорируя все символы, которые не являются буквами. - Функция
swap_word
используется для обмена двух слов в массиве. Она проходит по двум словам и меняет их местами, используя циклfor
. - В основной функции
main
мы вызываем функциюsort_words_abc
с аргументомs
. Эта функция возвращает отсортированную версию исходного массиваs
. Мы выводим исходный массив и отсортированный массив на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д