#include <iostream> using namespace std; int nextr[100]; int main() { char str[100]; char ptr[100]; } void kmp(char *str,int n) { nextr[0]=-1; int k; k=0; for(int i=1;i<n;++i) { while(k>-1 && str[k+1] != str[i]) k = nextr[k]; if(str[k+1] == str[i]) k=k+1; nextr[i]=k; } } int kmp2(char *str, char *ptr) { int len1=strlen(str); int len2=strlen(ptr); int k = -1; for(int i=0;i<len2;++i) { while(k>-1 && str[k+1] != ptr[i]) k=nextr[k]; if(ptr[i] == str[k+1]) k = k+1; if(k == len2-1) { return i-len1+1; } } return -1; }