如何写这样的算法,从一字符串如 "123 2342 sdaf"得到
"123"
"2342"
"sdaf"

解决方案 »

  1.   

    type
      TArray = array of string;procedure TrimChar(s:string;var sRet : TArray);
      function CountChar(s:string; c:char):integer;
      var
        i : integer;
      begin
        result := 0;
        for i := 1 to Length(s) do
          if s[i] = c then Inc(result);
      end;
    var
      iPos : integer;
      i    : integer;begin
      SetLength(sRet, CountChar(s, ' ') + 1);
      iPos := Pos(' ', s);
      i := 0;
      while iPos > 0 do
      begin
        sRet[i] := Copy(s, 1, iPos - 1);
        Delete(s, 1, iPos);
        iPos := Pos(' ', s);
        Inc(i);
      end;
      sRet[i] := s;
    end;
    procedure TForm1.Button1Click(Sender: TObject);
    var
      sA : TArray;
      s  : string;
      i  : integer;
    begin
      s := 'abc,cd,mm,44';
      sA := nil;
      TrimChar(s, sA);
      for i := Low(sA) to High(sA) do
        Memo1.Lines.Add(sA[i]);
    end;
      

  2.   

    var
      list:Tstrings;
      i:integer;
    begin
      list:=TStringlist.Create;
      list.CommaText:='123 2342 sdaf';
      list.Delimiter:=' ';
      for i:=0 to list.Count-1 do
        showmessage(list.Strings[i]);
    end;
      

  3.   

    打开delphi,F1-》输入条件string function,所有的都在这里,用pos,结合copy/delete就OK了
      

  4.   

    ------------------------------------------------------------------------
     回复人: LikeVCL(小刘) ( ) 信誉:96  2004-01-08 12:19:00  得分:0 
     
     
      珏心,我爱你
    ----------------------------------------------------------------------
     
    LikeVCL(小刘) :诶也!!!!吃饭嘞!!!好啦,白吃了!!
       顺便问,who are you?
      

  5.   

    我是谁不重要,Where are you?
      

  6.   

    vStr := StringReplace('123 2342 sdaf', ' ', #10#13, [rfReplaceAll]);
      

  7.   

    procedure TForm1.Button1Click(Sender: TObject);
    var slist: TStringList;
    begin
       sList:= TStringList.Create;
       SplitStr('123 2342 sdaf' ,sList);
       memo1.Text:= sList.Text;
       slist.Free;
    end;//以空格为分隔符
    procedure SplitStr(str: string; var sList: TStringList);
    var tmpStr: String;
        i: integer;
    begin
       if sList = nil then exit;   sList.Clear;
       str:= Trim(Str);
       str:= str+ ' ';
       tmpStr:='';
       for i:= 1 to Length(str) do
       begin
          if str[i] = ' ' then
          begin
             sList.Add(tmpStr);
             tmpStr:= '';
          end
          else tmpStr:= tmpStr + str[i];   end;
    end;
      

  8.   

    用POS查找空格,在用COPY截字符串就解决了
      

  9.   

    LikeVCL(小刘) :
    I am a man,
    I am a mature man.
    你是MM吗?
      

  10.   

    procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
    i:integer;
    t:boolean;
    begin
      s:='123 2342 sdaf';
      t:=true;
      while t do
      begin
        if pos(' ',s)<>0 then
        begin
          showmessage(copy(s,1,pos(' ',s)-1));
          s:=copy(s,pos(' ',s)+1,length(s));
        end
        else
        begin
          showmessage(s);
          t:=false;
        end;  end;end;to 小刘
    我真受不了你了
        :)
      

  11.   

    较我的前一个精简的
    procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
    begin
      s:=trim('123 2342 sdaf')+' ';
      while pos(' ',s)>0 do
      begin
        showmessage(copy(s,1,pos(' ',s)-1));
        s:=copy(s,pos(' ',s)+1,length(s));
      end;
    end;
      

  12.   

    list.Delimiter:=' ';
    这一句好象LIST没有这个属性啊
      

  13.   

    hch_45(んこん) 
    是可以的