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;
}
 
Esempio C#:
	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;
        }
    }
}