//KMP Algorithm referenced to the book of data structure int KMP(int n, const char pri_str[], const char sub_str[]) { int i, j; int next[n];// store the String of sub_str's value of next assert(pri_str != null and sub_str != null); // assure both the two are not null exec_next(n, sub_str, next); i = 0; j = 0; while(i < pri_str.length and j < sub_str.length) { if( j == -1 or pri_str[i] == sub_str[j]) //** { i++; j++; } else { j = next[j]; } } if( j >= sub_str.length)// match success { return (i - sub_str.length); } else //match fail { return -1; } // the below algorithm is for the array of next[] void exec_next(int n, const char str[], int next[]) { int i, k; boolean matched;// next[0] = -1; next [1] = 1 ; // match for the above "//**" attention to the next[0] for(i = 2; i < n, i++) { matched = false; for(k = i; k >= 1; k--) { if(strcmp(substr(str, 0, k), substr(str, i-k, k)) == 0) { matched = true; break(); } } next[i] = matched ? (k+1) : 1; } }