我想实现如下的字符串转换:
如一个字符为:
'abc#fafa#oij'我现在想把上面这个字符串分成三段,分别存入str1,str2,str3让str1的值为:'abc'
str2为:fafa
str3为:oij请大家帮一下忙吧!我实在是笨啊!

解决方案 »

  1.   

    uses ...StrUtils...var
      s  : String;
      ss : TStringList;
      i  : integer;
    begin
      s:='abc#fafa#oij';
      ss:=TStringList.Create;  ss.Text:=AnsiReplaceStr(s,'#',#13);  for i:=0 to ss.Count-1 do
        ShowMessage(ss.Strings[i]);
    end;
      

  2.   

    uses ...StrUtils...var
      ss : TStringList;
    begin
      ss:=TStringList.Create;
      ss.Delimiter:='#';
      ss.DelimitedText:='abc#fafa#oij';
      for i:=0 to ss.Count-1 do
        ShowMessage(ss.Strings[i]);
    end;
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
    s:string;
    i:integer;
    j:integer;
    k:integer;
    length_s:integer;
    temp_s:string;
    begin
       s:='abc#fafa#oij';
       s:='abc#fafa#oij'+'#';
       temp_s:='';
       j:=1;
       length_s:=length(s);
       for i:=1 to length_s do
          begin
              if s[i]='#' then
                  begin
                      for k:=j to i-1 do
                        begin
                          temp_s:=temp_s+s[k];
                        end;
                        listbox1.Items.Add(temp_s);
                        j:=i+1;
                        temp_s:='';
                  end;
          end;
    end;end.
      

  4.   

    var
      a : TStringList;
      i : integer;
    begin
      a:=TStringList.Create;
      a.Delimiter:='#';
      a.DelimitedText:='abc#fafa#oij';
      for i:=0 to a.Count-1 do
        ShowMessage(a.Strings[i]);
      

  5.   

    uses ...StrUtils...var
      ss : TStringList;
    begin
      ss:=TStringList.Create;
      ss.Delimiter:='#';
      ss.DelimitedText:='abc#fafa#oij';
      for i:=0 to ss.Count-1 do
        ShowMessage(ss.Strings[i]);
    end;
    最简单,用好  TStrings类 非常重要
      

  6.   

    以前学c时写的一段程序:
    function quzhi(s:string;var r:array of string):integer;
    //s为要转换的字符串,r为字符串数组,返回字符串数组的长度
    var i,j,n:integer;
    begin
      j:=1; n:=0;
      if s='' then
      begin
        result:=n;
        exit;
      end;
      for i:=1 to length(s) do
      begin
        if s[i]='#' then
        begin
          r[n]:=copy(s,j,i-j);
          inc(n);
          j:=i+1;
        end;
      end;
      if i>j then
      begin
        r[n]:=copy(s,j,i-j);
        inc(n);
      end;
      result:=n;
    end;
      

  7.   

    Delimiter、DelimitedText的方法是不错,但Delimiter只能是char啊。
    遇到“akdmk※sdkk※kcmkasc※kmscd※cds”
    “akdmk[分界]sdkk[分界]kcmkasc[分界]kmscd[分界]cds”就没有AnsiReplaceStr好了。只知其一,不知其二
      

  8.   

    procedure TForm1.Button1Click(Sender: TObject);
    var soustr,str1,str2,str3:String;
    begin
      soustr:='abc#fafa#oij';
      str1:=copy(soustr,0,POS('#',soustr)-1);
      soustr:=copy(soustr,POS('#',soustr)+1,length(soustr)-POS('#',soustr));
      str2:=copy(soustr,0,POS('#',soustr)-1);
      str3:=copy(soustr,POS('#',soustr)+1,length(soustr)-POS('#',soustr));
    end;
    一个一个读取字符理论上是可以的,但在DELPHI中这样很慢,有兴趣的话可以用汇编直接去写否则用COPY比较快,因为COPY本身就都是用汇编写的
      

  9.   

    自定义函数
    function GetMaskString(s,mask:string;position:integer):string;
    var
    str:string;
    i,len:integer;
    begin
    str:='';
    for i:=0 to position-1 do
    begin
    if (pos(mask,s)<=0) then
    begin
    str:=s;
    break;
    end;
    str:=copy(s,1,pos(mask,s)-1);
    len:=length(str);
    s:=copy(s,len+2,length(s)-len-1);
    end;
    result:=str;
    end;然后:
    str1:=GetMaskString('abc#fafa#oij','#',1);
    str2:=GetMaskString('abc#fafa#oij','#',2);
    str3:=GetMaskString('abc#fafa#oij','#',3);
    str4:=GetMaskString('abc#fafa#oij','#',4);呵呵,简单,实用