pos函数可取出子串在父串中第一次出现的位置,怎样取出子串在父串中最后一次出现的位置?

解决方案 »

  1.   

    这个需要自己处理,Pos函数做不到。
      

  2.   

    循环pos ,每pos一次删掉开始到pos位置的字串,继续pos一直到字串结尾然后最后pos到的就是你需要的
      

  3.   


    function ReversePos(SubStr, S: String): Integer;var
      i : Integer;begin
      i := Pos(ReverseString(SubStr), ReverseString(S));
      if i>0then i := Length(S)- i- Length(SubStr)+2;
      Result := i;
    end;调用的例子:  ShowMessage (IntToStr(ReversePos('abc','abc123abc456')));
      

  4.   

    POS +DELETE呀,我一般这么做的。delete掉第一次取出的
      

  5.   

    可以用LastDelimiter这个函数,
    需要注意的一点是这个函数是取最后一个分隔符的位置,单个字符的情况下没任何问题,可分隔符长度大于1时会有点问题。
    比如 S:= 'ABCDEFG' 
    LastDelimiter('FG', S)=7  //应该为6才对,难道只匹配G?
    LastDelimiter('GF', S)=7  //GF不是S的子串,可也和G进行了匹配。
    呵呵。。 不知为什么要这样设计难道只支持一位的分隔符?
    实在不行你就只能按上面说的POS +DELETE。
      

  6.   

    如果要查找最后一个位置,查找可以从头到尾查,效率会低些,不用DELPHI的,用POSEX就可以,查找后把查找点往后推就可以
    从尾往头查,也可以
    顺手给楼主写了个函数,参数VCL 中POSEX改写的, 简单测试了几个没发现问题,如果有什么问题,麻烦告诉我function PosExFromEnd(const SubStr, S: string): Integer;
    var
      I,X: Integer;
      Len, LenSubStr: Integer;
    begin
      I := Length(S);
      LenSubStr := Length(SubStr);
      Len := Length(S) - LenSubStr + 1;
      while Length(S) - I <= Len do
      begin
        if S[I] = SubStr[LenSubStr] then
        begin
          X := 1;
          while (X <  LenSubStr) and (S[I - X] = SubStr[LenSubStr - X]) do
            Inc(X);
          if (X = LenSubStr) then
          begin
            Result := I - LenSubStr + 1;
            exit;
          end;
        end;
        Dec(I);
      end;
      Result := 0;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ShowMessage(IntToStr(PosExFromEnd('23', '123512156234567')));
    end;
      

  7.   

    试了一下,下面这个函数不能通过编译;
    function ReversePos(SubStr, S: String): Integer;
    var
      i : Integer;
      begin
      i := Pos(ReverseString(SubStr), ReverseString(S));    //ReverseString变量没有声明
      if i>0then i := Length(S)- i- Length(SubStr)+2;
      Result := i;
    end;[Error] Unit1.pas(60): Undeclared identifier: 'ReverseString'
    [Error] Unit1.pas(60): Incompatible types
    [Error] Unit1.pas(60): Incompatible types
    [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
      

  8.   

    我记得有个StrScan(Str和Scan中间还有另一个什么字母)的函数
    处理PChar的可以做这件事情。
    呵呵,找到了,告诉我一声,我比较健忘。