Вывести слова строки в обратном порядке

Задача

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

Решение

Описание переменных: 

  • str - строка;
  • len - длина строки;
  • a - длина очередного слова;
  • i - текущая позиция в строке.

Алгоритм решения задачи:

Будем перебирать символы строки с конца и измерять количество подряд идущих непробельных символов. Если очередной символ - пробел, следует вывести на экран отрезок строки от предыдущего с конца символа (i + 1) на длину подряд идущих непробельных символов. Это делается с помощью функции copy. После того как слово будет выведено, надо обнулить фиксируемую длину слова (a = 0.

Поскольку вывод слова "срабатывает", только когда встречается пробел, то первое слово строки (последнее из найденных при поиске с конца) выведено не будет, если перед ним нет пробела. Поэтому в программе за циклом предусмотрен отдельный вывод последней найденной подстроки.

Программа на языке Паскаль:

var
    str: string;
    len, i, a: byte;
 
begin
    readln(str);
    len := length(str);
 
    a := 0;
    for i:=len downto 1 do begin
        if str[i] = ' ' then begin
            write(copy(str, i+1, a), ' ');
            a := 0;
        end
        else 
            a := a + 1;
    end;
    write(copy(str, i, a));
    writeln;
end.

Пример работы программы:

one two three
three two one