Изменить порядок слов в строке на обратный

Задача

Вводится строка, состоящая из слов, разделенных пробелами. Следует заменить ее на строку, в которой слова идут в обратном порядке по-сравнению с исходной строкой. Вывести измененную строку на экран.

Пояснение к задаче и алгоритм решения

Данная задача существенно проще решается, если изменяется не исходная строка, а формируется новая из слов первой, но слова из первой берутся начиная с конца. После того как новая строка будет сформирована, ее можно присвоить переменной, которой была присвоена исходная строка, таким образом перезаписав ее.

Если пишется отдельная функция для изменения порядка слов, то в нее можно передавать исходную строку, а она будет возвращать измененную. Возвращаемое значение может быть присвоено той же самой переменной, значение которой передавалось в функцию.

В общих чертах алгоритм может быть таким. Строка просматривается с конца и фиксируется количество подряд идущих символов, которые не являются пробелами (т.е. длина слова). Как только встретится пробел, участок строки от этого пробела на длину слова добавляется в конец новой строки. Таким образом, если новая строка изначально пуста, то последнее слово исходной строки окажется первым в новой. Предпоследнее слово исходной строки окажется вторым в новой и т.д.

То, каким образом происходит копирование части строки из исходной и добавление этой части в новую строку, зависит от языка программирования, функций работы со строками.

Исходный код на языке программирования Pascal

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

Пример(ы) выполнения программы на языке Pascal

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

Исходный код на языке программирования Python

# Вариант 1:

def conversely(s):
    s2 = ''
    i = len(s)-1
    while i >= 0:
        if s[i] == ' ':
            s2 = s2 + s[i+1:] + ' '
            s = s[:i]
            i = len(s) - 1
        else:
            i -= 1
    s2 = s2 + s
    return s2
 
string = input()
string = conversely(string)
print(string)

# Вариант 2:

def conversely(s):
    s = s.split()
    s.reverse()
    s2 = ""
    for i in s:
        s2 += i + ' '
    return s2
 
string = input()
string = conversely(string)
print(string)

Пример(ы) выполнения программы на языке Python

каждый охотник желает знать, где сидит фазан  
фазан сидит где знать, желает охотник каждый

Исходный код на языке программирования Basic

input str$
gosub conversely
print str$
end
 
conversely:
        len = length(str$)
        a = 0
        s$ = ""
        for i=len to 1 step -1
                if mid(str$,i,1) = " " then
                        s$ = s$ + mid(str$,i+1,a) + " "
                        a = 0
                else
                        a = a + 1
                endif
        next i
        s$ = s$ + mid(str$,1,a)
        str$ = s$
return

Пример(ы) выполнения программы на языке Basic

conversely words of string
string of words conversely

Тема

Функции

Уровень сложности

Сложный

Дата публикации

Комментарий

Вариант 3

def change(a):
    a=a.split()
    a=a[::-1]
    b=' '.join(a)
    return b
a='1'
while len(a)!=0:
    a=input('A ')
    print (a)
    itog=change(a)
    print (itog)