Data una stringa devo vedere in che indizi è presente, funziona con
occhio
ginocchio
pascal
il fu mattia pascal
ma se devo mettere più cirrispondenze come
pascal
il fu mattia pascal non c'entra con pascal
mi spara, logicamente, tutte le posizioni, a me serve solo l'indice di partenza del primo e del secondo pascal.
Ho cercato altri algoritmi ma sono con hash e altre cose che al momento non mi servono; mi basta un forza bruta simile a quello qui sotto:
codice:
program StringMatching;
uses crt, strings;
const
maxdim=50;
var
cosa,dove:string[maxdim];
i,j,dimCosa,dimDove:integer;
start:char;
procedure trovaStr;
begin
dimCosa:=length(cosa);
dimDove:=length(dove);
i:=1;
for j:= 0 to (dimDove-dimCosa) do
begin
while (i < dimCosa) and (cosa[i] = dove[i+j]) do
i:=i+1;
if i >= dimCosa then
writeln('Corrispondenza trovata dalla posizione ', j);
end;
end;
begin
clrscr;
writeln('Questo programma cerca tutte le corrispondenze di una stringa in');
writeln('un''altra. Premi un tasto per iniziare...');
readln(start);
clrscr;
writeln('Inserire striga da cercare, lunghezza massima ', maxdim, ': ');
readln(cosa);
writeln('Inserire dove cercare, lunghezza massima ', maxdim, ': ');
readln(dove);
trovaStr;
writeln('Premi un tasto per uscire');
readln
end.
ciao grazie