有没有函数能把字符串以空格为分隔符,把子串放入数组?

xiaoxinghappy 2005-12-22 03:11:10
比如说有一个字符串是 a:='I am a programer'
那我现在想把各个单词分离并放入数组
s[0]:='I'
s[1]:='am'
s[2]:='a'
s[3]:='programer'

用什么函数能一次分离?

我知道在VB里有split 可以做到 s=split(a,' ') 就可以了,在 delphi 里面有没有类似的函数?

...全文
512 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
huitouren519 2006-07-03
  • 打赏
  • 举报
回复
学习
yhyhai 2006-07-02
  • 打赏
  • 举报
回复
进来学习.
risingsoft 2006-06-30
  • 打赏
  • 举报
回复
type
TSplitArray=array of string;
PSplitArray=^TSplitArray;
TSplit=class(TStringList)
public
function Split(str:string;Delimiter:string):TSplitArray;
function SplitStr(str:string;Delimiter:string):TSplitArray;
end;

{ TSplit }

function TSplit.Split(str, Delimiter: string): TSplitArray;
var
i:integer;
begin
if length(Delimiter)>0 then
self.Delimiter := Delimiter[1]
else
self.Delimiter := char(pchar(''));
self.DelimitedText := str;

setLength(result,count);
for i := 0 to count - 1 do
begin
result[i] := Strings[i];
end;
end;

function TSplit.SplitStr(str, Delimiter: string): TSplitArray;
var
temp:string;
i:integer;
ArraySize:integer;
begin
temp := str;
ArraySize := 0;

while pos(Delimiter,temp) > 0 do
begin
inc(ArraySize);
setLength(result,ArraySize);
result[high(result)] := copy(temp,1,pos(Delimiter,temp)-1);
System.delete(temp,1,pos(Delimiter,temp)+length(Delimiter)-1);
end;
if temp<>'' then
begin
inc(ArraySize);
setLength(result,ArraySize);
result[high(result)] := temp;
end;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
var
SplitArray:TSplitArray;
split:TSplit;
i:integer;
begin

split := TSplit.Create;
SplitArray := split.Split('I,am,a,boy!',',');
for i := low(SplitArray) to high(SplitArray) do
showmessage(SplitArray[i]);

SplitArray := split.SplitStr('I,,am,,a,,boy!',',,');
for i := low(SplitArray) to high(SplitArray) do
showmessage(SplitArray[i]);
split.Free;
end;

测试过的!没问题
zhangxuyu1118 2006-06-30
  • 打赏
  • 举报
回复
var
strs:TStringList;
begin
strs:=TStringList.Create;
strs.Delimiter:=' ';
strs.DelimitedText:='I am a programer';

ShowMessage(strs.Strings[0]);
ShowMessage(strs.Strings[1]);
ShowMessage(strs.Strings[2]);
ShowMessage(strs.Strings[3]);
strs.free;
end;
dreamtou 2006-06-28
  • 打赏
  • 举报
回复
Function TMulMonitor.SplitStr(st:string;sp:string):tstrings;
var
tmp:string;
i,FLen:integer;
begin
flen:=length(st);
splitstr:=tstringlist.Create ;
for i:=1 to flen do
begin
tmp:=tmp+copy(st,i,1);
if tmp<>sp then
begin
if copy(st,i,1)=sp then
begin
splitstr.add(copy(tmp,1,length(tmp)-1));
tmp:='';
end;
end
else
tmp:='';
application.ProcessMessages;
end;
splitstr.add(tmp);
end;
我转成tstringlist的了,转数组也是一样的
FigoZhu 2006-06-26
  • 打赏
  • 举报
回复
太好了,我自己也碰到类似的问题了,看了这帖就解决了。
wudi_1982 2006-06-23
  • 打赏
  • 举报
回复
放一个memo组件在窗体上,memo的名字为strs
begin
memo1.lines.Delimiter:=' ';
memo1.lines.DelimitedText:='I am a programer';

end;

你就会在memo上看到你要的效果了。。实现原理和“哈欠”的一样。

lfh05 2006-06-23
  • 打赏
  • 举报
回复
好贴
zzzjaychung 2005-12-26
  • 打赏
  • 举报
回复
觉得应该买个DELPHI的函数大全,找不到函数,,,
DoorKey 2005-12-26
  • 打赏
  • 举报
回复
大家怎么把问题想得这么复杂??一个函数搞定而且是DELPHI自带的:ExtractStrings
在CLASSES单元里。有空多看看DELPHI自带的源代码吧,哈哈,接分喽。
ZyxIp 2005-12-25
  • 打赏
  • 举报
回复
楼上正解。

不过如果想放在数组中自己写一人就非常容易的,用StrPos
baiduan 2005-12-25
  • 打赏
  • 举报
回复
halfdream 真强
halfdream 2005-12-24
  • 打赏
  • 举报
回复
var
strs:TStringList;
begin
strs:=TStringList.Create;
strs.Delimiter:=' ';
strs.DelimitedText:='I am a programer';

ShowMessage(strs.Strings[0]);
ShowMessage(strs.Strings[1]);
ShowMessage(strs.Strings[2]);
ShowMessage(strs.Strings[3]);
hhnick 2005-12-24
  • 打赏
  • 举报
回复
TStringList的DelimitedText、Delimiter是吃素的么
非常正确,stringlist功能很好的。
clasj 2005-12-24
  • 打赏
  • 举报
回复
ExtractStrings这个函数也不错啊:)

procedure TForm1.Button1Click(Sender: TObject);
const
a = 'I am a programer';
var
s: TStringList;
i: Integer;
begin
s:=TStringList.Create;
ExtractStrings([' '], [], PChar(a), s);
for i:=0 to s.Count-1 do
showmessage(s[i]);
s.Free;
end;
zzzjaychung 2005-12-23
  • 打赏
  • 举报
回复
哈哈,就是VB里的SPILTER函数,
DELPHI里我没找到这个函数,于是自己用POS写了一个,
传的值和 chenylin(陈SIR) 用的一样,一个ARRAY,一个STRING,一个SUBSTRING,
SET 可变ARRAY的长度为1,
在SPILTER里用POS找到第一个SUBSTRING的位置,(如没有,则ARRAY[0]:=STRING)
然后LEFTSTRING将POS前面的部分给ARRAY[0],
SETLENGTH(ARRAY,I) (I是一个自加1的INTEGER)
这样一直加,直到找不到SUBSTRING,
最后再做一次将剩余部分传到最后一个ARRAY[LAST]里。
返回函数值。
快乐老猫 2005-12-23
  • 打赏
  • 举报
回复
TStringList的DelimitedText、Delimiter是吃素的么
chenylin 2005-12-23
  • 打赏
  • 举报
回复
procedure TForm1.Split(Mstr:String; Sstr: String; var Darray: array of string);
var
i,k,m:integer;
tStr:String;
begin
k:=0;
m:=Length(Mstr);
for i:=1 to m do
begin
if (Mstr[i] = Sstr[1]) or (i=m) then
begin
Darray[k]:=tStr;
tStr:='';
k:=k+1;
end
else
tStr:=tStr+Mstr[i];
end;
end;

//-调用
procedure TForm1.Button1Click(Sender: TObject);
var
a:string;
s:array [0..5] of string;
begin
a:='I am a programer';
self.Split(a,' ',s);
showmessage('ok');
end;
xiaoxinghappy 2005-12-23
  • 打赏
  • 举报
回复
TStringList 是用回来换行分隔的啊?
hongss 2005-12-23
  • 打赏
  • 举报
回复
呵呵,用pos函数辨别空格的方式也可以实现
加载更多回复(1)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧