怎么把字符串中的数字加起来?(50分)

L

liuyang

Unregistered / Unconfirmed
GUEST, unregistred user!
有了一个字符串比如:
sformat:='abc,15;x,5;y,9'
要的到的结果是15+5+9=29
有朋友是这么做的
j:=0;
for i:=1 to length(sformat) do
begin
if sformat in ['0'..'9'] then
j := j + strtoint(sformat);
end;
这个只能把字符串中的小于10的加起来才是正确的。
他得出的结果是1+5+5+9=20。
怎么才能让两位或更多的位的数字作为一个整体加入?
 
procedure TForm1.Button1Click(Sender: TObject);
var
i,iresult:integer;
s,stemp:string;
begin
s := 'sdkfdf;15;dkdk12;1';
stemp := '';
iresult := 0;
for i:=1 to length(s) do
begin
if s in ['0'..'9'] then
stemp := stemp + s
else
if trim(stemp)<>'' then
begin
iresult := iresult + strtoint(stemp);
stemp := '';
end;
end;
if trim(stemp)<>'' then
iresult := iresult + strtoint(stemp);
showmessage(inttostr(iresult));

end;
 
这是一个表达式求值问题,找一下数据结构的书,
要用到堆栈。以前用Pascal做过,可惜源码没有了
 
自己写个函数呀,','之后、';'之前(最后一个数字除外)的就是数字,不要偷懒。
 
j:shortstring;
...
i:=1;
while i< length(sformat)
begin
if sformat in ['0'..'9'] then
begin
j:=sformat ;
while (sformat[i+1] in ['0'..'9'])
begin
j :=j+strtoint(sformat);
i:=i+1;
end;
...//j就是多位字符串
end;
i:=i+1;
end;
 
多人接受答案了。
 
顶部