如何拆分下面的字符串?280大洋啊! (280分)

  • 主题发起人 主题发起人 大傻
  • 开始时间 开始时间

大傻

Unregistered / Unconfirmed
GUEST, unregistred user!
比如有两个字符串如下,写个函数拆分字符串:

(HBL0.5+S0.4)*1 拆分结果如下:
规格 重量 份数
HBL 0.5 1
S 0.4 1

(HA2L0.5+HB3L0.2+ML0.2)*3 拆分结果如下:
规格 重量 份数
HAL 0.5 3
HB3L 0.2 3
ML 0.2 3

另外,如何对用户录入的字符串(像上面的一样)
进行合法性检查
 
根据0的位置来拆分
 
感觉像一个编译系统。。。规格可以看成一个关键字。[:D]
 
procedure TForm1.Button1Click(Sender: TObject);
var a:array[1..10,1..3] of string;
b1,b2,b3:String;
i,c,w:integer;
begin
b1:='(HA2L0.5+HB3L0.2+ML0.2)*3';
i:=pos('*',b1);
b3:=copy(b1,i+1,length(b1)-i);
delete(b1,i,length(b1)-i+1);
c:=0;
b1:=MP_Replacestr(b1,'(','',false,false);
b1:=Mp_ReplaceStr(b1,')','',false,false);
while b1<>'' do
begin
c:=c+1;
i:=pos('+',b1);
if i>0 then
begin
b2:=copy(b1,1,i-1);
delete(b1,1,i);
end else begin
b2:=b1;
b1:='';
end;
for i:=length(b2) downto 1 do
if not (b2 in ['0','1','2','3','4','5','6','7','8','9','.']) then
begin
w:=i;
break;
end;
a[c,1]:=copy(b2,1,w);
a[c,2]:=copy(b2,w+1,length(b2));
a[c,3]:=b3;
end;
for i:=1 to c do
showmessage(a[i,1]+' '+a[i,2]+' '+a[i,3]);
end;

//查找ss中是否有Substr替换成Newstr
function TForm1.MP_ReplaceStr(ss,SubStr,NewStr:string;RepAll,IgCase:Boolean):string;
var
a:TReplaceFlags;
begin
if RepAll=true then
include(a,rfReplaceAll);
if IgCase=true then
include(a,rfIgnoreCase);
Result:=stringReplace(ss,Substr,Newstr,a);
end;
 
数据一定在最后的化,就好办
 
第一步:找到‘*’获得数量,删除()*X
第二步:用循环语句
定位‘+’‘+’之前的串str1,在Str1中定位‘.’从‘.’之前找到第一个不为数字的
字符,可以装配出重量和规格。
 
感谢HunterTeam给出了完整的代码,我的分全给你啦!
 
后退
顶部