我有这个代码用于以小写形式返回一个字符串,使用递归:
function min(ch:string):string;
begin
if ( ch = '' ) then
min:= ''
else
if (ch[1] in ['A'..'Z']) then
begin
ch[1]:=chr(ord(ch[1])+32);
min:= ch[1] + min(copy(ch,2,length(ch)-1));
end;
end;
但它不起作用:
当我使用示例min('AbC')
运行时,输出a
仅为abc
。
这里的问题在哪里?
答案 0 :(得分:1)
问题是你并不总是调用递归函数。一旦你找到一个已经是小写的字母,你就不再看它后面的字符了。因此返回值被截断为该字符。
当被查看的角色不是大写字母时,您也应该调用它。因此,将递归调用移出if
,它将起作用:
function min(ch:string):string;
begin
if ( ch = '' ) then
min:= ''
else
begin
if (ch[1] in ['A'..'Z']) then
ch[1]:=chr(ord(ch[1])+32);
min:= ch[1] + min(copy(ch,2,length(ch)-1));
end;
end;
在ideone.com上看到它。