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:
ciao graziecodice: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.![]()

Rispondi quotando
