Задача 4.3

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. Проверка

Программа работает корректно.

Хостинг от uCoz