任意字符串Str(widestring),任意两个关键词,现在要查两个关键词在文章内容中的位置。
比如:两关键词为key1:='中国';
key2:='中国人';Str='我是中国人,我来自中国,中国是一个美丽的地方,中国地大物博,中国人民热情好客'查出位置后是
中国人      3
中国        10
中国        13
中国        24
中国人      31
结果可以写入数组,文本等都可以。
即某一位置查找到“中国人”,即使包含中国,也只记录较长的关键词的位置。

解决方案 »

  1.   

    我想一个笨方法:
    VAR STR1:STRING:临时变量 
        P_KEY:INTEGER;
    STR1:=STR;
    先用长的关键字找
    P_KEY:=POS(KEY,STR1);
    WHILE P_KEY>0 DO
    BEGIN
       DELETE(STR1,P,LENGTH(KEY));
       P_KEY:=POS(KEY,STR1);
    END;
    然后在用短的比较剪辑过的STR1,如果关键字多,就用循环。
      

  2.   

    用PosEx,它可能对你有些用,我用过它统计过一个子串在父串中出现的次数,你试试它
      

  3.   

    查找的一个办法
    procedure TForm1.Button1Click(Sender: TObject);
    var str,str2:string;
     intThePos:integer;
    begin
      str:='123123123';
      str2:='2';
      while pos(str2,str)>0 do
      begin
        intThePos:=intThePos+Inttostr(pos(str2,str))
        memo1.Lines.Add(intThePos);
        str:=copy(str,pos(str2,str)+1,length(str)-pos(str2,str));
      end;
    end;
      

  4.   

    Soooooooooooory,上边的笔误
    procedure TForm1.Button1Click(Sender: TObject);
    var str,str2:string;
     intThePos:integer;
    begin
      str:='123123123';
      str2:='2';
      intThePos:=0;
      while pos(str2,str)>0 do
      begin
        intThePos:=intThePos+pos(str2,str);
        memo1.Lines.Add(Inttostr(intThePos));
        str:=copy(str,pos(str2,str)+1,length(str)-pos(str2,str));
      end;
    end;
      

  5.   

    str:='123123123';
      str2:='2';
    运行得出
    2
    5
    8
      

  6.   

    先找中国人,再找中国,原理和下面的一样
    var
      S, Substr: string;
      Len, P: Integer;
      Rresult1,Rresult2:string;
    begin
      S := '我是中国人,我来自中国,中国是一个美丽的地方,中国地大物博,中国人民热情好客'';
      Substr := '中国人';
      Len := Length(Substr);
      P := AnsiPos(Substr, S);
      while P <> 0 do
      begin
        Delete(S, P, Len);
        P := AnsiPos(Substr, S);
        Rresult1:=Rresult+' '+inttostr(p);  //记录下中国人的位置,
      end;
      while P <> 0 do
      begin
        substr:='中国';
        Len := Length(Substr);
        P := AnsiPos(Substr, S);
        while P <> 0 do
        begin
          Delete(S, P, Len);
          P := AnsiPos(Substr, S);
          Rresult2:=Rresult+' '+inttostr(p);  //记录下中国的位置,
        end;  end;
    end;
      

  7.   

    上面的代码错了一点
    先找中国人,再找中国,原理和下面的一样
    var
      S, Substr: string;
      Len, P: Integer;
      Rresult1,Rresult2:string;
    begin
      S := '我是中国人,我来自中国,中国是一个美丽的地方,中国地大物博,中国人民热情好客'';
      Substr := '中国人';
      Len := Length(Substr);
      P := AnsiPos(Substr, S);
      while P <> 0 do
      begin
        Delete(S, P, Len);
        P := AnsiPos(Substr, S);
        Rresult1:=Rresult+' '+inttostr(p);  //记录下中国人的位置,
      end;
      //改正后的
      substr:='中国';
      Len := Length(Substr);
      P := AnsiPos(Substr, S);
      while P <> 0 do
      begin
        while P <> 0 do
        begin
          Delete(S, P, Len);
          P := AnsiPos(Substr, S);
          Rresult2:=Rresult+' '+inttostr(p);  //记录下中国的位置,
        end;  end;
    end;