比如说有一个字符串是 a:='I am a programer'
那我现在想把各个单词分离并放入数组
s[0]:='I'
s[1]:='am'
s[2]:='a'
s[3]:='programer'用什么函数能一次分离?我知道在VB里有split 可以做到 s=split(a,' ') 就可以了,在 delphi 里面有没有类似的函数?

解决方案 »

  1.   

    没见过,不过可以这样
    with TStringList.Create do
    try
      Text := StringReplace(s, ' ', #13#10, [rfReplaceAll]);
      for i := 0 to Count - 1 do
        ShowMessage(Strings[i]);
    finally
      Free;
    end;
      

  2.   

    TStringList 是用回来换行分隔的啊?
      

  3.   

    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;
      

  4.   

    呵呵,用pos函数辨别空格的方式也可以实现
      

  5.   

    TStringList的DelimitedText、Delimiter是吃素的么
      

  6.   

    哈哈,就是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]里。
    返回函数值。
      

  7.   

    TStringList的DelimitedText、Delimiter是吃素的么
    非常正确,stringlist功能很好的。
      

  8.   

    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;
      

  9.   

    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]);
      

  10.   

    楼上正解。不过如果想放在数组中自己写一人就非常容易的,用StrPos
      

  11.   

    大家怎么把问题想得这么复杂??一个函数搞定而且是DELPHI自带的:ExtractStrings
    在CLASSES单元里。有空多看看DELPHI自带的源代码吧,哈哈,接分喽。
      

  12.   

    觉得应该买个DELPHI的函数大全,找不到函数,,,
      

  13.   

    放一个memo组件在窗体上,memo的名字为strs
    begin
      memo1.lines.Delimiter:=' ';
      memo1.lines.DelimitedText:='I am a programer';end;你就会在memo上看到你要的效果了。。实现原理和“哈欠”的一样。
      

  14.   

    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的了,转数组也是一样的
      

  15.   

    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;测试过的!没问题
      

  16.   

    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;