假设有字符串:
1:如果有数字的话,就必须以 ## 结尾
2:有可能为空s:='1##2##5##21##28##'
现在我要找出 1,2,5,21,28并把 1,2,5,21,28 放到一个数组 A 里
A[0]:=1;
A[1]:=2;
A[2]:=5;
A[3]:=21;
A[4]:=28;当然做为参数的 s 是变化的。请教各位大哥,应该怎样写这个函数?谢谢!

解决方案 »

  1.   

    Type
      TIntegerArray = Array of Integer;
    Function ParseString(s:String):TIntegerArray;
    var
      i:Integer;
      temp:String;
    begin
      Result:=nil;
      While True do
      begin
        i:=Pos('##',s);
        if i<=0 then Break;
        temp:=Copy(s,1,i-1);
        delete(s,1,i+1);    SetLength(Result,Length(Result)+1);
        Result[High(Result)]:=StrtoIntDef(temp,0);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      b:TIntegerArray;
      i:Integer;
    begin
      b:=ParseString('1##2##5##21##28##');
      for i:=0 to High(b) do showmessage(inttostr(b[i]));
    end;
      

  2.   

    try:
    procedure TForm1.Button1Click(Sender: TObject);
     var
      str:string;
      strlist:TstringList;
      a:array of string;
      i:integer;
    begin
      str:='1##2##5##21##28##';
      try
        strlist:=TstringList.create;
        strlist.CommaText:=str;
        strlist.Delimiter:='##';
        setlength(a,strlist.Count);
        for i:=0 to strlist.Count-1 do
          begin
            a[i]:=strlist.Strings[i];
            showmessage(a[i]);
          end;
       finally
          strlist.Free;
       end;
    end;
      

  3.   

    至于判断含有数字可以这样
    for i:=1 to length(s) do
      if (s[i]>'0') and (s[i]<'9') then
        begin
          ShowMessage('Include number');
        end;
      

  4.   

    to Kshape([伟大的大伟!]) 
    我的思路和你的一样,不过我不太同意你的做法因为Delimiter接受的是一个Char,而'##'却是一个String
    所以在做你的动作之前,需要将'##'换成一个'#'或者其它字符其实 firstshine(黑里透红) 的方法也不错
    不过我不太喜欢用Pos函数,我觉得由自己来判断或许会比较好一点
      

  5.   

    Kshape([伟大的大伟!]) 程序修正如下:procedure TForm1.Button1Click(Sender: TObject);
     var
      str:string;
      strlist:TstringList;
      a:array of string;
      i:integer;
    begin
      str:='1##2##5##21##28##';
      str:=StringReplace(str, '##', ',', [rfReplaceAll]);
      try
        strlist:=TstringList.create;
        StrList.CommaText := str;
        setlength(a,strlist.Count);
        for i:=0 to strlist.Count-1 do
          begin
            a[i] := strlist.Strings[i];
            //可以在这里加入一句判断,如果为空,那么不输出
            showmessage(a[i]);
          end;
       finally
          strlist.Free;
       end;
    end;