Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425

    [pascal] string matching non funziona

    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
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    nooooooo
    copiando ho visto l'errore:

    i:=1 va dentro il ciclo esterno:

    codice:
    ...
    procedure trovaStr;
     begin
      dimCosa:=length(cosa);
      dimDove:=length(dove);
       for j:= 0 to (dimDove-dimCosa) do
        begin
          i:=1;
         while (i < dimCosa) and (cosa[i] = dove[i+j]) do
          i:=i+1;
         if i >= dimCosa then
          writeln('Corrispondenza trovata dalla posizione ', j+1);
        end;
     end;
    ...
    scusate, ciao
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.