Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Перестановка слов в строке

Автор: 18192123 6.01.2007 19:55

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

Слова могут разделяться только пробелами. Их количество в строке результате не меняется, порядок следования символов в словах остаётся неизменным ( например, исходная строка acs dfr, результат dfr acs)
Для строк использовать только length, chr, ord.


Я хочу поступить так:
строку разбить на слова, идя с конца строки получить последнее слово (оно будет записано наоборот). после в полученном слове изменить порядок слов, результат - в конечную строку, так со всеми словами.

Начала реализовывать , программа не рабатает....


uses crt;

Function slovo ( const s : string; var i : byte) : string;
var
w : string;
begin
w := '';
while ( i <= length (s) ) and ( s[i] <> ' ' ) do
begin
w := w + s[i];
i := i+1;
end;
slovo := w;
end;

VAR
s, w, srez : string;
i, j : byte;
c : char;

BEGIN
clrscr;
srez := '';
writeln ( ' vvedite stroku simvolov' );
readln ( s );
for i := length ( s ) downto 1 do
begin
w := slovo ( s, i );
for i := 1 to length ( w ) div 2 do
begin
c := w[i];
w[i] := w[length (w) - i +1];
w[length (w) - i +1] := c;
end;
srez := srez + w + ' ';
end;
writeln ( ' rezylitat rabotu' );
writeln (srez);
readkey;
end.



Автор: klem4 6.01.2007 20:18

function Convert(const s: String): String;
var
i, j, k: Integer;
res: String;
begin

i := Length(s);
res := '';

while (i > 0) do begin
j := i;

while (i > 0) and (s[i] <> ' ') do dec(i);

for k := i + 1 to j do res := res + s[k]; res := res + ' ';

dec(i);
end;

Convert := res;
end;

var
s: String;

begin
s := '1 2 3 4 5';
writeln(Convert(s));
end.

Автор: 18192123 6.01.2007 21:23

Цитата(klem4 @ 6.01.2007 16:18) *


for k := i + 1 to j do




а с какой целью мы в этом операторе к i прибавляем 1?

Автор: klem4 6.01.2007 21:26

Потомучто в этот момент i либо равно 0, либо s[i] = пробел