Pascal函数循环

时间:2013-11-02 19:02:19

标签: function reverse pascal freepascal

为什么这段代码不起作用?

当我执行时,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;

1 个答案:

答案 0 :(得分: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;