请帮我写一个字符串切割函数,就像PHP中的explode函数一样,谢谢!(45分)

  • 主题发起人 主题发起人 rockxu
  • 开始时间 开始时间
R

rockxu

Unregistered / Unconfirmed
GUEST, unregistred user!
要求能将字符串按指定的字符串或字符切割,然后将分开后的字符串返回到数组变量中,如将
下列字符串'i am wind'按' '切割,返回一个数组A,有三个元素,分别是
A[0]='i'
A[1]='a'
A[2]='wind'
我用了全部积分,不多,还请各位大侠见谅
谢谢!
 
简单思路:查找字符串中空格
控件:Edit,Listbox1,button
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
s:string;
nPos:integer;
begin
s:=Edit1.text+' ';//后面追加一个空格
for i:=1 to length(s) do
begin
nPos:=Pos(' ',s);
if nPos>0 then
begin
listbox1.items.add(Copy(s,1,nPos-1));
s:=Copy(s,nPos+1,length(s)-nPos);
end;
end;
end;


//未考虑到中间有多个空格的情况,自己写吧
 
我来提供一种方法。用TSTRINGLIST,DELPHI的TSTRINGLIST真的很强大。
var Strings:TStrings;
begin
Strings:=TStringList.Create;
Strings.Delimiter:=' ';
Strings.DelimitedText:='I am wind';
ShowMessage(Strings[0]);
ShowMessage(Strings[1]);
ShowMessage(Strings[2]);
 Strings.Free;
end;
 
根据某个字符分割字符串的函数
procedure SeparateTerms(s : string;Separator : char;Terms : TStringList);
{ This browses a string and divide it into terms whenever the given
separator is found. The separators will be removed }
var
hs : string;
p : integer;

begin
Terms.Clear; // First remove all remaining terms
if Length(s)=0 then // Nothin' to separate
Exit;
p:=Pos(Separator,s);
while P<>0 do
begin
hs:=Copy(s,1,p-1); // Copy term
Terms.Add(hs); // Add to list
Delete(s,1,p); // Remove term and separator
p:=Pos(Separator,s); // Search next separator
end;
if Length(s)>0 then
Terms.Add(s); // Add remaining term
end;

 
type
StrAry = array of string;

function SplitStr(aStr: String; ADelimiter: Char): StrAry;
var
s: TStringList;
i: integer;
begin
s := TStringList.Create;
s.Delimiter := ADelimiter;
s.DelimitedText := aStr;
SetLength(result, s.Count);
for i := 0 to s.Count - 1 do
result := s.Strings;
s.Free;
end;

//注意使用此函数的代码必须使用同样的数据类型( StrAry )接收返回值。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部