1. Условие
Составить программу упорядочивания слов по алфавиту. Множество слов представлено в виде строки символов заданного размера. Слова в строке отделены символом пробел.
2. Решение
Задаем размер строки. Выделяем блок оперативной памяти под массив символов и вводим строку с помощью функции gets(). В цикле подсчитываем количество слов в строке. Далее выделяем память под массив указателей, в котором будут храниться адреса слов, и в цикле записывам адреса слов в данный массив, помещая в исходную строку сместо пробелов нулевой байт. Производим пузырьковую сортировку массива указателей, и выводим отсортированную строку на экран.
3. Алгоритм решения

4. Текст программы
1 : # include <stdio.h>
2 : # include <stdlib.h>
3 : # include <conio.h>
4 : # include <string.h>
5 : void main()
6 : {
7 : int i, j, k=0, n, size;
8 : char *a, **b, *temp;
9 : clrscr( );
10: printf( " \n Введите количество символов n (n-целое): ");
11: scanf("%u", &n);
12: getchar();
13: a=(char*)malloc((n+1)*sizeof(char));
14: printf(" Введите символы:");
15: gets(a);
16: size=strlen(a);
17: for(i=0; i<size; i++)
18: if(a[i] == ' ')
19: k++;
20: k++;
21: b=(char**)malloc(k*sizeof(char*));
22: b[0]=a;
23: j=1;
24: for(i=0; i<size; i++)
25: if(a[i] == ' ')
26: {
27: b[j]=&a[i+1];
28: j++;
29: a[i]='\0';
30: }
31: for( i=0; i < k; i++)
32: for( j = k-1; j > i; j-- )
33: {
34: if ( strcmp(b[j-1], b[j])>0 )
35: {
36: temp=b[j-1];
37: b[j-1]=b[j];
38: b[j]=temp;
39: }
40: }
41: printf( " \n Новая строка: " );
42: for(i=0; i<k; i++)
43: printf( "%s ", b[i] );
44: printf( "\n \n \n Для завершения программы введите любой символ" );
45: free( a );
46: free( *b );
47: getch( );
48: }
5. Работа программы
Введите количество
символов n (n-целое): 20
Введите символы:
ров конь рота кот пар
Введенная строка:
ров конь рота кот пар
Новая строка:
конь кот пар ров рота
Для завершения программы введите любой символ
6. Проверка
Программа работает корректно.