为什么这段代码不起作用?
当我执行时,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 :(得分: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;