Задача : Поменять местами символы в строке, так чтобы она развернулась в обратном порядке.
Решение : Строка в Delphi представляет собой массив символов. К каждому символу можно обращаться по его индексу. Все что от нас требуется это пройтись в цикле по строке в обратном порядке и записать этот обратный порядок в новую строку. Данную задачу можно решить несколькими путями. Мы разберем решение по средствам процедуры, а также напишем собственную функцию. Функция дает преимущество при повторении операций.
Код процедуры
[cc lang=»delphi» tab_size=»2″ line_numbers=»false» no_links=»false»]
procedure TForm1.Button1Click(Sender: TObject);
var // раздел описания переменных процедуры
s, s1: string; // символом s обычно обозначают локальную строковую переменную
i: integer; // символом i обычно обозначают локальную целую числовую переменную
begin
s := Edit1.Text; // Строка берётся из Edit1
for i := Length(s) — 0 downto 0 do // запускаем убывающий цикл от числа длинны строки до 0
S1 := S1 + S[i]; //складываем символы в новую переменную
Showmessage(s1); // вывод развёрнутой строки в сообщение
end;
[/cc]
Код функции
[cc lang=»delphi» tab_size=»2″ line_numbers=»false» no_links=»false»]
function perevorot(s: string): string;
var // раздел описания переменных функции
i, j: integer;
Sr: string;
Begin
j := Length(s); // находим длинну строки
for i := 0 to Length(s) do // запускаем возрастающий цикл
begin
Sr := Sr + s[j]; //складываем символы в новую переменную
j := j — 1; // уменьшаем индекс
end;
Result := Sr; // переменной результат отдаем полученную строку
End;
[/cc]
Код вызова функции :
[cc lang=»delphi» tab_size=»2″ line_numbers=»false» no_links=»false»]
procedure TForm1.Button2Click(Sender: TObject);
begin
Showmessage(perevorot(Edit1.Text)); //вывод развёрнутой строки в сообщение, полученной в результате работы функции
end;
[/cc]
Так выглядит наш проект по окончании работ.
Мдя… индусская лапша…
Для переворота строки (мы говорим о классических строках, а не новомодних неизменяемых) не обязательно иметь доп. переменную и проходить циклом по всей стоке (а если строка так в гигабайт?).
procedure Strreverse(var S : String);
var
I, L : Integer;
C : Char;
begin
L := Length(S);
For I := 1 To L div 2 Do // 1-base string
Begin
C := S[I];
S[I] := S[L-I+1];
S[L-I+1] := C;
End;
end;
Для функции можно сразу использовать Result для конкатенации строки, а не вводить доп. переменную Sr.
Согласен с Вами, дорогой товарищ.
По-прежнему жду Ваших статей для размещения.
Статью можно дополнить ещё комментарием Капитана Очевидность, он нам подсказывает заглянуть в справку и говорит, что есть родная функция ReverseString(const AText: string): string; И живет она в модуле System.StrUtils, который при использовании нужно прописать в USES