2013-11-02 4 views
0

Может ли кто-нибудь мне помочь: почему этот код не работает?Pascal funcition is looped

Когда я выполняю, окна останавливают его, потому что, вероятно, зацикливаются и останавливаются.

function revstr(a:string):string; 
    var out_s:string; 
    ls,i:integer; 

    begin 
    ls:=11; 

    for i:=1 to ls do 
     out_s:=out_s+a[ls-i+1]; 

    revstr:=out_s; 
    end; 
+0

Используйте отладчик. –

+0

Я не переводил хорошо, потому что, когда я пишу, в а есть разные знаки, а не слова ... – CrashDown

ответ

3

Ваша временная строка вывода out_s никогда не инициализируется. Кроме того, вы полагаете, что длина входной строки составляет 11 символов. Что произойдет, если это всего 10 символов? Тогда вы получите доступ к элементу, который не существует.

Не важно, но переменная 'ls' не нужна. Либо сделайте его постоянным, либо используйте голые значения 11 в вашем коде.

Было бы лучше, чтобы написать функцию следующим образом:

Function Reverse (const a: string): string; 
var 
i: integer; 

begin 
result:= ''; 
for i:= length (a) downto 1 do 
    result:= result + a[i] 
end; 

Альтернативный способ приведен ниже. Этот код будет быстрее, так как нет конкатенации строк, но он не слишком интуитивно понятен и может работать только в Delphi.

Function Reverse (const a: string): string; 
var 
i, j: integer; 
P: PChar; 

begin 
SetLength (Result, Length (a)); 
P:= Pchar (Result); 
j:= 0; 
for i:= length (a) downto 1 do 
    begin 
    p[j]:= a[i]; 
    inc (j) 
    end; 
end;