分解字符串(50分)

  • 主题发起人 主题发起人 we
  • 开始时间 开始时间
W

we

Unregistered / Unconfirmed
GUEST, unregistred user!
如何用给定的分割符将一个字符串分解为多个子串。
如:"we are friend"分割符为' ',结果为"we","are","friend"。
谢谢!
 
这是以前写的一个,土了点,凑合用吧。

function SubStrings(S:string):TStringList;
var
i:Integer;
TempList:TStringList;
TempString:string;
begin
TempString:='';
TempList:=TStringList.Create;
for i:=1 to Length(S) do
begin
if S<>' ' then
TempString:=TempString+S
else
begin
if S[i-1]<>' ' then
begin
TempList.Add(TempString);
TempString:='';
end;
end;

end;
result:=TempList;
end;
 
用POS和COPY,比如:

var i: integer;
st1, st : string;
begin
i := pos(' ', St)
while i<> 0 do begin
st1:= copy(st, 1, i-1);
st := copy(st, i+1, length(s-1));
listbox1.items.add(st1);
i := pos(' ', st);
end;
 
是否有函数可以直接调用?
谢谢!
 
SLEEP不是已经给了你FUNCTION,供你调用了,这FUNCTION将返回一个
STRINGLIST。

你要看结果,只要放个ListBox,用ListBox1.Strings := SubStrings(S:string);
就可以了。
 
我想Delphi应该提供这样一个函数,在C语言和java及VB中都有。
谢谢大家!
 
C语言中有标准函数?能否贴出来?
 
呵呵, Perl里也有...
 
Mmmmmmm.......还是perl处理字符串厉害!
C和delphi,唉!...
 
看来大家是越来越懒了,有时候还是自己动手的好
 
如果用stringlist,还不如直接:
stringlist.text:=stringreplace(' ',#13#10,[rfreplaceall])

这样不是更省事?
 
cakk 不错
不过甭老是用空格做分隔符,添个参数
 
有一个极为简单的办法,
var
strlist:tstringlist;

strlist:=tstringlist.create;
strlist.commatext:=string;

这样,string中的内容就能够自动分拆到strlist中了。
 
fa: commatext会把","也当作分割符的,另外,如果字符串里面有双引号会有问题.
 
多人接受答案了。
 
后退
顶部