Вывести слова строки по алфавиту

Тема: 
Строки

Вводится строка слов. Требуется вывести слова в алфавитном порядке по первым их буквам.

Перед тем как сортировать слова по первым буквам алфавита, их сначала надо выделить из строки. Будем считать, что строка состоит из слов, разделенных только одним пробелом, в начале строки (перед первым словом) и в конце (после последнего слова) пробелов нет. Выделив очередное слово, будем помещать его в массив. Алгоритм разделения строки на слова:

  1. Присвоить одной переменной (k) значение 0, другой (s) - пустую строку. k - это счетчик слов, также определяет количество элементов в массиве; в s будет "собираться" очередное слово.
  2. В цикле перебираются символы введенной строки.
    1. Если очередной символ пробел или является последним символом, то
      1. если символ последний, то добавить его к строке s;
      2. увеличить счетчик слов (k) на 1;
      3. записать в массив по индексу k значение s;
      4. присвоить s пустую строку (т.е. приготовиться для "сборки" нового слова).
    2. Иначе (когда очередной символ не пробел) добавить в конец строки s этот очередной символ.

Массив слов можно отсортировать по первым буквам слов. В таблице кодов символов буквы, стоящие в алфавите дальше от начала, имеют значения кодов больше. Поэтому буквы можно сравнивать. Буква, стоящая ближе к началу алфавита, будет иметь значение кода, которое меньше, чем у буквы, стоящей дальше от начала. В программе ниже используется сортировка по возрастанию методом пузырька. Для извлечения первых букв слов используется синтаксис обращения к элементу двумерного массива (arr[i,j]), так как строку можно представить как одномерный массив. Другими словами, по первому индексу извлекается слово, а по второму - конкретный символ этого слова. Поскольку в данной задаче требуется извлекать только первый символ, то второй индекс всегда равен 1 (astr[j,1]).

алг сортировка слов строки по алфавиту
нач
  лит str, s
  литтаб astr[1:20]
  цел i, j, k, l
  ввод str
  l := длин(str)
  k := 0
  s := ""
  нц для i от 1 до l
    если str[i] = " " или i = l то
      если i = l то s := s + str[i] все
      k := k + 1
      astr[k] := s
      s := ""
     иначе
      s := s + str[i]
    все
  кц
 
  нц для i от 1 до k-1
    нц для j от 1 до k-i
      если astr[j,1] > astr[j+1,1] то
        s := astr[j]
        astr[j] := astr[j+1]
        astr[j+1] := s
      все
    кц
  кц
 
  нц для i от 1 до k
    вывод astr[i], "; "
  кц
кон

Пример выполнения:

один два три четыре пять шесть семь
два; один; пять; семь; три; четыре; шесть;