有很长一个字符串,存放在一个字符串变量str1里,怎样在str1里找到字符abc呢?因为可能会有很多abc,怎样把每个abc分别保存在不同的字符串变量str2,str3,str4……里呢?
请给出主要部分的源代码。谢谢!

解决方案 »

  1.   

    var
      P; Integer;
    begin
      while true
      Pos('abc', Str);
      if Pos > 0 then Str1 := Copy(Str, P, 3);
      Delete(Str, 1, P);
      end;
      

  2.   

    就是说找到substring后,把原来的string变成substring之后的字符串,依次更新知道找完,OK!
      

  3.   

    var
      i,j: integer;
    begin
      j:=1;
      i:=pos('abc', Str);
      while i>0 do  
      str[j] := Copy(Str, P, 3);  //str[1..100]為已定義的字符串數組
      j:=j+1;
      Delete(Str, 1, i+2);
      i:=pos('abc', Str);
      end;
      

  4.   

    to: jianke5555(剑客) 
    先谢谢了,我是初学者,有些地方还看不明白。
    delete(str,1,i+2);这句话怎么解释?delete的用法能介绍一下吗?
    另外这句:
    str[j] := Copy(Str, P, 3);  //str[1..100]為已定義的字符串數組
    str[1..100]是不是自己开始在前面做如下定义:
    Type str[1..100]: string;
    然后就可以直接用了?
    这种方式似乎不妥啊,事先并不知道需要多少,有可能不够,或者是多出,造成内存浪费,我理解的对吗?(初学者,不好意思)
      

  5.   

    1.delete(str,1,i+2);
     即是從str中的第一個字符開始刪除到第(i+2)個字符,也就是刪除包括第一個'abc'以前的字符.(建議把str先保存后再操作)
    2.str1[1..100]
      var
        str1:array[1..100]of string;
    要根據你的字符串的大小由你自己決定串的大小.
      

  6.   

    例如。str1='TEST  ¦44.5  ¦4'  
     
    怎么样分别提取TEST,44.5,4出来呢??  
    ---------------------------------------------------------------  
    ---------------------------------------------------------------  
     
    procedure  SeparateTerms(s  :  string;Separator  :  char;Terms  :  TStringList);  
       var  
       hs  :  string;  
       p  :  integer;  
     
    begin  
       Terms.Clear;  //  清除所有的terms  
       if  Length(s)=0  then      //  如没有任何分隔字符存在就退出  
           Exit;  
       p:=Pos(Separator,s);  
       while  P  <  >0  do  
       begin  
           hs:=Copy(s,1,p-1);      //  复制  term  
           Terms.Add(hs);              //  加入  term  
           Delete(s,1,p);              //  清除分隔符  
           p:=Pos(Separator,s);  //  寻找下一个分隔符  
       end;  
       if  Length(s)  >0  then  
           Terms.Add(s);                //  结尾剩余字符加入  term  
    end;  
     
     
    //使用办法  
     
    var  
    Terms  :  TStringList;  
     
    begin  
         
       Terms:=TStringList.Create;  
       str1='TEST  &brvbar;44.5  &brvbar;4'  
       SeparateTerms(str1,'  &brvbar;',Terms);  
       Terms.Free;  
    end;
      

  7.   

    例如。str1='TEST  &brvbar;44.5  &brvbar;4'  
     
    怎么样分别提取TEST,44.5,4出来呢??  
    ---------------------------------------------------------------  
    ---------------------------------------------------------------  
     
    procedure  SeparateTerms(s  :  string;Separator  :  char;Terms  :  TStringList);  
       var  
       hs  :  string;  
       p  :  integer;  
     
    begin  
       Terms.Clear;  //  清除所有的terms  
       if  Length(s)=0  then      //  如没有任何分隔字符存在就退出  
           Exit;  
       p:=Pos(Separator,s);  
       while  P  <  >0  do  
       begin  
           hs:=Copy(s,1,p-1);      //  复制  term  
           Terms.Add(hs);              //  加入  term  
           Delete(s,1,p);              //  清除分隔符  
           p:=Pos(Separator,s);  //  寻找下一个分隔符  
       end;  
       if  Length(s)  >0  then  
           Terms.Add(s);                //  结尾剩余字符加入  term  
    end;  
     
     
    //使用办法  
     
    var  
    Terms  :  TStringList;  
     
    begin  
         
       Terms:=TStringList.Create;  
       str1='TEST  &brvbar;44.5  &brvbar;4'  
       SeparateTerms(str1,'  &brvbar;',Terms);  
       Terms.Free;  
    end;
      

  8.   

    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    有问题!!
    重贴!!!例如。str1='TEST|44.5|4|COUNT'  
     
    怎么样分别提取TEST,44.5,4,COUNT出来呢??  
    ---------------------------------------------------------------  
    ---------------------------------------------------------------  
     
    procedure  SeparateTerms(s  :  string;Separator  :  char;Terms  :  TStringList);  
       var  
       hs  :  string;  
       p  :  integer;  
     
    begin  
       Terms.Clear;  //  清除所有的terms  
       if  Length(s)=0  then      //  如没有任何分隔字符存在就退出  
           Exit;  
       p:=Pos(Separator,s);  
       while  P  <  >0  do  
       begin  
           hs:=Copy(s,1,p-1);      //  复制  term  
           Terms.Add(hs);              //  加入  term  
           Delete(s,1,p);              //  清除分隔符  
           p:=Pos(Separator,s);  //  寻找下一个分隔符  
       end;  
       if  Length(s)  >0  then  
           Terms.Add(s);                //  结尾剩余字符加入  term  
    end;  
     
     
    //使用办法  
     
    var  
    Terms  :  TStringList;  
     
    begin  
         
       Terms:=TStringList.Create; 
       try 
          str1='TEST|44.5|4|COUNT'  
          SeparateTerms(str1,'|',Terms); 
          ///       // 加入你的代码      ///
       finally 
          Terms.Free;  
       end;end;
      

  9.   

    to:jianke5555(剑客) 
    如果得到所有的字符串并保存到数组里后,怎样把他们再全部一起显示在某个文本框里呢?
      

  10.   

    如果要保存在数组str[i],先把数组值全部赋值0,
    for i := 1 to 10 do  //假设数组有10个数
    begin
      if str[i] <> 0 then
      begin
        edit1.text := edit1.text+inttostr(str[i]);        
      end;
    end;