unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} {判断字符串中子串个数的函数} function GetSubStrNum(SubStr,Str: string): Integer; begin Result := 0; while Pos(SubStr, Str) > 0 do begin Str := Copy(Str, Pos(SubStr,Str)+1, Length(Str)); Inc(Result); end; end; {测试} procedure TForm1.FormCreate(Sender: TObject); var s1,s: string; begin s1 := '万一'; s := '万一万一万一'; ShowMessage(IntToStr(GetSubStrNum(s1,s))); {3} end; end.再优化:
function GetSubStrNum(const SubStr,Str: WideString): Integer; var pw: PWideChar; i,SubLen: Integer; begin Result := 0; pw := PWideChar(Str); SubLen := Length(SubStr); while i > 0 do begin i := Pos(SubStr, pw); Inc(pw, i - 1 + SubLen); if Boolean(i) then Inc(Result); end; end;这是 "道法自然" 兄的代码:
function GetSubStrNum(const SubStr, Str: widestring ): Integer; var i,x: Integer; Len,LenSubStr: Integer; begin Result := 0; i := 1; LenSubStr := Length(SubStr); Len := Length(Str) - LenSubStr + 1; while i <= Len do begin if Str[i] = SubStr[1] then begin x := 1; while (x < LenSubStr) and (Str[i+x] = SubStr[x+1]) do Inc(x); if (x = LenSubStr) then Result := Result + 1; Inc(i,x); end else Inc(i); end; end;