一串字符串'abce*1234*jfid*'....很长
如何把*号前面的字符串分别都加入到comboBox中呢? 第一行是'abce'
                                                第二行是'1234'
                                                第三行是'jfid'
                                                第四行是.....
                                                第五行是.....

解决方案 »

  1.   

    给你一个完整的procedure TForm1.Button1Click(Sender: TObject);
    var s:string;
      m,st,sl:string;
      i,j:integer;
      ss:array[0..100] of string;
    begin
      s:='1234*5678*9999*3333*';
      sl:='';
      j:=0;
      for i:=1 to length(s) do begin
          m:=midstr(s,i,1);
          if m='*' then
            begin
                st:=sl;
                sl:='';
                ss[j]:=st;
                j:=j+1;
            end
          else
            begin
                sl:=sl + m;
            end;  end;  combobox1.Clear ;
      for i:=0 to j-1 do begin
          combobox1.Items.Add(ss[i]);
      end;
    end;
      

  2.   

    function PartitionString(StrV,PrtSymbol: string): TStringList;
    var
      iTemp: integer;
    begin
      result := TStringList.Create;
      iTemp := pos(PrtSymbol,StrV);
      while iTemp>0 do begin
        if iTemp>1 then result.Append(copy(StrV,1,iTemp-1));
        delete(StrV,1,iTemp+length(PrtSymbol)-1);
        iTemp := pos(PrtSymbol,StrV);
      end;
      if Strv<>'' then result.Append(StrV);
    end;你调用上面的函数就可以了。
      

  3.   

    经过测试
     ksaiy(真爱不是取代,而是心中永恒的存在) ( ) 的方法要快1点而且分隔符可以是字符串。
    因为我刚好要实现一个类似的功能。谢谢了。
    我改写成如下过程:
    procedure PartitionString(StrV,PrtSymbol:string;strList:TStrings;KillBlack:Boolean=True);
    var
      iTemp: integer;
    begin
      strList.Clear;
      iTemp := pos(PrtSymbol,StrV);
      while iTemp>0 do begin
        if iTemp>1 then
        begin
          if KillBlack then
            StrList.Append(Trim(copy(StrV,1,iTemp-1)))
          else
            StrList.Append(Copy(StrV,1,iTemp-1));
        end;
        delete(StrV,1,iTemp+length(PrtSymbol)-1);
        iTemp := pos(PrtSymbol,StrV);
      end;
      if KillBlack then
        if Trim(Strv)<>'' then
          StrList.Append(Trim(StrV))
      else if StrV<>'' then
        StrList.Append(StrV);
    end;测试方法:
    procedure TForm1.Button2Click(Sender: TObject);
    var
      I:Cardinal;
    begin
      I:=GetTickCount;
      PartitionString(Memo1.Text,Edit2.Text,ListBox1.Items,CheckBox1.Checked);
      ShowMessage(IntToStr(GetTickCount-I));
    end;
      

  4.   

    ComboBox1.Items.Text := StringReplace('1111*222*333', '*', #13#10, [rfReplaceAll, rfIgnoreCase]);
      

  5.   

    学习g961681(我好惨啊!)的方法.
    以前是用POS(),COPY()
      

  6.   

    我也来写一种比较方便的用法:
    procedure TForm1.FormCreate(Sender: TObject);
    var
      ll:tstringlist;
      i:integer;
    begin
     ll:=tstringlist.Create ;
     try
     ll.Delimiter :='*';
     ll.DelimitedText :='123*456*789';
     for i:=0 to ll.Count-1 do
     begin
         cmb.Items.Add(ll.Strings[i])
     end;
     except
       freeandnil(ll);
     end;
    end;
      

  7.   

    把 String 看成字符数组
    var
      S: String;
    begin
      S:='1+2';
      for i:=0 to Length(S) do
      if S[i]='+' then ...
      

  8.   

    上面的错了
    for i:=0 to Length(S) do  //改为==>
    for i:=1 to Length(S)// 注意.字符串的 下标 是从1开始的.