我需要找出一个单词出现在字符串中的时间,但问题是你需要找到的单词之间可以有空格,例如你想查看单词 text <多少次/ em>出现在* 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;
它会检查一个字母出现的时间,例如,如果我有 ttext 它只会给我一个,因为我只检查第一个 t 所以我每次在字符串中找到 t 时都会调用该函数,但对于包含许多字符的2D数组,这个方法太慢了,比如1000x1000,所以我正在寻找更快的解决方案。
答案 0 :(得分:0)
您可以检查数组两次,在第一次运行时删除所有空格。 在第二个使用这样的比较函数(x是你搜索的数组,y是你要搜索的子字符串,我是你正在检查的当前元素):
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;
在数组的每个元素上。