String 如何以最快的方式做到这一点?

String 如何以最快的方式做到这一点?,string,find,pascal,String,Find,Pascal,我需要知道一个单词在字符串中出现了多少次,但关键是你需要找到的单词之间可以有空格,例如你想知道单词文本在*tOeOxOt中出现了多少次“它会给你输出1,或者举个例子,在textt中,它会给你输出2,我用pascal写了这个过程 procedure search(x:integer; i:integer); var x2:integer; begin x2:=x+1; while (x2<=n) and (x2>0) do begin if myarray[x2]=mystri

我需要知道一个单词在字符串中出现了多少次,但关键是你需要找到的单词之间可以有空格,例如你想知道单词文本在*tOeOxOt中出现了多少次“它会给你输出1,或者举个例子,在textt中,它会给你输出2,我用pascal写了这个过程

procedure search(x:integer; i:integer);
var
x2:integer;
begin
x2:=x+1;
while (x2<=n) and (x2>0) do begin
    if myarray[x2]=mystring[i+1] then
        if i=length(mystring)-1 then
        final:=final+1
        else
        search(x2,i+1);

x2:=x2+1;
end;
end;
过程搜索(x:integer;i:integer);
变量
x2:整数;
开始
x2:=x+1;
当(x20)开始时
如果myarray[x2]=mystring[i+1],那么
如果i=长度(mystring)-1,则
最终:=最终+1
其他的
搜索(x2,i+1);
x2:=x2+1;
终止
终止

它检查它从一个字母中出现的次数,例如,如果我有ttext,它只会给我一次,因为我只从第一个t开始检查,所以每次我在字符串中找到一个t时,我都会调用这个函数,但是这个方法对于有很多字符的2D数组来说太慢了,例如1000x1000,因此我正在寻找一个更快的解决方案。

您可以检查阵列两次,在第一次运行时通过它删除所有空间。 在第二种情况下,使用类似这样的比较函数(x是搜索的数组,y是搜索的子字符串,i是检查的当前元素):

函数比较(var x,y:myarray;i:integer):布尔;
var l:整数;
开始
比较:=假;
对于l:=1到长度(y)不开始
如果x[i+l]y[l],则退出;
终止
比较:=真;
终止

在数组的每个元素上。

我想您不明白:\n我不想求解,例如,如果我有一个字符串“textabc”和另一个字符串“t ex t”,我需要从中删除空格并查看它是否出现在第一个字符串中,我需要计算例如“text”在“ttext”中出现的次数,即2,第一个带第一个t和分词,另一个带第二个t和分词。希望你们现在明白了。
function compare(var x,y:myarray; i:integer):boolean;
var l:integer;
Begin
  compare:=false;
  for l:=1 to length(y) do Begin
    if x[i+l] <> y[l] then Exit;
  End;
  compare:=true;
End;