递归问题,求救!!!!(100分)

  • 主题发起人 主题发起人 noelse520
  • 开始时间 开始时间
N

noelse520

Unregistered / Unconfirmed
GUEST, unregistred user!
function getMaxValue(str: string):string;
begin
str := copy(str,pos('-',str)+1,Length(str));
if Pos('-',str)>0 then
getMaxValue(str);
Result := str;
end;
我用如上函数想把字符串,形如“-10-40-100”得到最后一个减号后面的数。但我得到的是空,不知道错在哪儿,哪个大哥帮我下忙~!
 
function getMaxValue(str: string):string;
begin
str := copy(str,pos('-',str)+1,Length(str));
if Pos('-',str)>0 then
Result := getMaxValue(str)
else
Result := str;
end;
 
谢谢你,问题解决了,但还是有点不明白。我把函数改成这样不知道怎么也不行:
function getMaxValue(str: string):string;
begin
str := copy(str,pos('-',str)+1,Length(str));
if Pos('-',str)>0 then
str := getMaxValue(str)
else
Result := str;
end;
这样返回也是为空,能告诉我是怎么回事吗? 我没明白道理~!
 
比如你有三个减号,在判断的时候,你的第二次递规没有返回值,没有制定result,所以返回了空值.
 
简单点说,如果你一个减号都没有,那这个时候函数是没有返回值的,所以你看到的是空,一般都是先要跟函数制定一个返回值的,然后在进行操作.
 
上面的人已经给出了说明,
我给你另一种方法吧,不是递归,比较容易懂。

function getMaxValue(str: string):string;
begin
while pos('-',str)>0 do
begin
delete(str,1,pos('-',str));
end;
result:=str;
end;
 
这样写好那个,不想说你了。还递归。既浪费空间有浪费效率。打击你一下。
function getMaxValue(str: string):string;
var
i,j:integer;
begin
j:=length(str);
for i:=j downto 1 do
if str='-' then
break;
result:=copy(str,i-1,j-i);
end;
//没有调试,自己测试
 
to dcsdcs:很好的方法,赞一个
 
result:=copy(str,i-1,j-i);
好像应该是
result := copy(str, i+1, j-i);
 
to: noelse520,按你的第一种方法测试,结果不是空啊..而是10-40-100
如果你的函数定义成function getMaxValue(var str: string):string;结果就没问题.
二楼的方法我测试之后结果是空啊??
你是怎么测得结果呢?能把全部代码贴出来吗?
 
为什么不用substring函数呢,不知道dephi里有没。呵呵
 
substring是和delphi里的copy功能基本一样
 
too dcsdcs:
你的方法确实好。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
829
import
I
后退
顶部