200分,请教提取字符串中的字符!!!(200分)

  • 主题发起人 主题发起人 yeser_macao
  • 开始时间 开始时间
Y

yeser_macao

Unregistered / Unconfirmed
GUEST, unregistred user!
11.22*3.88*5.6-1
这样一个字符串,要提取其中的三个数字
需要得到:11.22 3.88 5.6 -号后面的直接不要
怎么提取呢??
 
思路:
先用pos判断*的位置
再用copy函数
 
能不能写的具体些,麻烦了!
 
var
s,s1:string;
i:Integer;
begin
s:='11.22*3.88*5.6-1';
i:=Pos('*',s);
s1:=Copy(s,1,i-1);
s:=Copy(s,i+1,10000000);
Memo1.Lines.Add(s1);

i:=Pos('*',s);
s1:=Copy(s,1,i-1);
s:=Copy(s,i+1,10000000);
Memo1.Lines.Add(s1);

i:=Pos('-',s);
s1:=Copy(s,1,i-1);
Memo1.Lines.Add(s1);
end;
 
procedure TForm1.BitBtn1Click(Sender: TObject);
{11.22*3.88*5.6-1
这样一个字符串,要提取其中的三个数字
需要得到:11.22 3.88 5.6 -号后面的直接不要
怎么提取呢?? }
Var
I: Integer;
s: String;
L: TStringList;
begin
s := '11.22*3.88*5.6-1';
S := Copy(S, 1, Pos('-',S)-1); //-号后面的直接不要 -> 11.22*3.88*5.6
L := TStringList.Create;
try
L.Delimiter := '*';
L.DelimitedText := S; // 11.22,3.88,5.6
For I := 0 To L.Count - 1 Do
Begin
Application.MessageBox(PChar(L.Strings),'系统提示',64);
End;
finally
L.Clear;
L.Free;
end;
end;
 
var
s,s1:string;
len:integer;
i:Integer;
begin
s:='11.22*3.88*5.6-1';
s1:='';
len:=Length(s);
for i:=1 to len do
begin
if (s<>'*') and (s<>'-') then
s1:=s1+s
else if s= '*' then
s1:=s1+' '
else if s='-' then
break;
end;
Edit1.Text:=s1;
end;

可以改用Memo输出
var
s,s1:string;
len:integer;
i:Integer;
begin
s:='11.22*3.88*5.6-1';
s1:='';
len:=Length(s);
for i:=1 to len do
begin
if (s<>'*') and (s<>'-') then
s1:=s1+s
else if s= '*' then
begin
Memo1.Lines.Add(s1);
s1:='';
end
else if s='-' then
begin
Memo1.Lines.Add(s1);
break;
end;
end;
end;
 
使用正则表达式提取最方便!
 
如果你的格式一直是保持这样的话,posex copy函数就可以了
 
最终用了lanyaoshi的答案,同时也谢谢各位的提示和答案.
 
后退
顶部