Физико-математический лицей №30
Программирование
Примеры программ на Си
 

2. Сортировка слов в строке.

< Предыдущая ^ Назад к списку задач Следующая >
/* FILENAME : task_1_2.c */
/* Eugene V. Ogurtsov */
/* Last update : 23.05.2000 */
/* Физико-математический лицей № 30 */
/* Сортировка слов в строке. */
/* Написать программу, которая вводит с клавиатуры строку,
 * состоящую из латинских букв и пробелов, все слова
 * введенной строки упорядочивает по алфавиту и выводит
 * упорядоченную строку на экран. */

#include <stdio.h>
#include <string.h>

/* Массив для хранения введенной строки */
char String[30000];

/* Массив номеров позиций, с которых начинаются слова */
int Words[15000];

/* Количество введенных слов */
int Number;

/* Основная функция */
void main( void )
{
  int i, j, Temp;
  int Flag; /* Признак окончания слова */

  printf("Введите строку >\n");
  gets(String);

  /* Предварительная обработка */
  for (Number = 0, Flag = 1, i = 0; String[i]; i ++)
  {
    /* Все пробелы заменяем на символ конца строки */
    if (String[i] == ' ')
    {
      String[i] = 0;
      Flag = 1;
    }
    /* Позиции первых после пробелов символов записываем в массив */
    else if (Flag)
    {
      Words[Number ++] = i;
      Flag = 0;
    }
  }

  /* Сортировка */
  for (j = Number - 1; j > 0; j --)
    for (i = 0; i < j; i ++)
      if (strcmp(&String[Words[i]], &String[Words[i + 1]]) > 0)
      {
        Temp = Words[i];
        Words[i] = Words[i + 1];
        Words[i + 1] = Temp;
      }

  /* Вывод результата */
  for (i = 0; i < Number; i ++)
    printf("%s\n", &String[Words[i]]);
} /* End of 'main' function */

/* End of 'task_1_2.c' file */
Файл в кодировке MS-DOS
27 ноября 2003 года   Огурцов Е.В.