Да, нечётные всё портят. Строго с чётными:
Код:
L := Length(Edit1.Text);
SetLength(S, L);
for I := 1 to L do
begin
if I mod 2 = 0 then Continue;
S[L-I] := Edit1.Text[i];
S[L-I+1] := Edit1.Text[I+1];
end; // for I := 1 to L shr 1 do
Edit1.Text := S;
Ну а с любыми некрасиво:
Код:
L := Length(Edit1.Text);
if L mod 2 <> 0 then
begin
Edit1.Text := Edit1.Text + #1;
Inc(L);
end; // if L mod 2 <> 0 then
SetLength(S, L);
for I := 1 to L do
begin
if I mod 2 = 0 then Continue;
S[L-I] := Edit1.Text[i];
S[L-I+1] := Edit1.Text[I+1];
end; // for I := 1 to L shr 1 do
if S[2] = #1 then
Delete(S, 2, 1);
Edit1.Text := S;
Забавный эффект - при нечётной длине символы возвращаются на своё место после числа перестановок равного длине строки.