Esempio C:
Esempio C#:codice:#include <stdio.h> #include <string.h> #include <malloc.h> void preKmp(char *x, int m, int kmpNext[]) { int i, j; i = 0; j = kmpNext[0] = -1; while (i < m) { while (j > -1 && x[i] != x[j]) j = kmpNext[j]; i++; j++; if (x[i] == x[j]) kmpNext[i] = kmpNext[j]; else kmpNext[i] = j; } } int KMP(char *x, char *y) { int m,n; int i, j; int *kmpNext; m = strlen(x); n = strlen(y); kmpNext = (int*)malloc(sizeof(int)*m); if ( !kmpNext ) { printf("Memoria insufficiente.\n"); return - 1; } /* Preprocessing */ preKmp(x, m, kmpNext); /* Searching */ i = j = 0; while (j < n) { while (i > -1 && x[i] != y[j]) i = kmpNext[i]; i++; j++; if (i >= m) { //OUTPUT(j - i); free(kmpNext); return j - i; //i = kmpNext[i]; } } free(kmpNext); return -1;; } int main() { int res; char *x = "stringa"; //char *x = "ciao"; char *y = "questa e' la stringa di prova"; res = KMP(x, y); if ( res >= 0 ) printf("stringa '%s' trovata in posizione %d\n", x, res); else printf("\nStringa '%s' non trovata.\n", x); return 0; }
codice:using System; namespace KnuthMorrisPratt { class Program { static void Main(string[] args) { string x = "stringa"; //string x = "ciao"; string y = "questa e' la stringa di prova"; int res = KMP(x, y); if (res >= 0) Console.WriteLine("stringa '{0}' trovata in posizione {1}", x, res); else Console.WriteLine("Stringa '{0}' non trovata.", x); } static void preKmp(string x, int m, int[] kmpNext) { int i = 0; int j = kmpNext[0] = -1; while (i < m - 1) { while (j > -1 && x[i] != x[j]) j = kmpNext[j]; i++; j++; if (x[i] == x[j]) kmpNext[i] = kmpNext[j]; else kmpNext[i] = j; } } static int KMP(string x, string y) { int m,n; int i, j; m = x.Length; n = y.Length; int[] kmpNext = new int[m]; /* Preprocessing */ preKmp(x, m, kmpNext); /* Searching */ i = j = 0; while (j < n) { while (i > -1 && x[i] != y[j]) i = kmpNext[i]; i++; j++; if (i >= m) { //OUTPUT(j - i); return j - i; //i = kmpNext[i]; } } return -1; } } }

Rispondi quotando