2013-11-02 102 views
0

任何人都可以幫助我:爲什麼這段代碼不起作用?Pascal功能是循環的

當我執行,Windows停止它,因爲可能是循環和停止工作。

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;