0

Why this code doesn't work?

When I execute, windows stops it, becouse is probably looped and stoped working.

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;
4

1 回答 1

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;
于 2013-11-02T19:26:34.487 回答