int next_str(char* str, int len, int *next ){
char child[128];
int p = -1;
int q = 0;
next[0] = -1;
while( q < len - 1){
if(p == -1 || str[q] == str[p]){
q++;
p++;
next[q] = p;
}
else{
p = next[p];
}
}
}
int KMP(){
char main_str[128];
char pattern_str[128];
int main_len;
int pattern_len;
int next[128] = {0};
printf("main string is ");
scanf("%s", main_str);
printf("pattern string is ");
scanf("%s", pattern_str);
main_len = strlen(main_str);
pattern_len = strlen(pattern_str);
next_str(pattern_str, pattern_len, next);
int i = 0;
int j = 0;
while(i < main_len && j < pattern_len){
if(j == -1 || main_str[i] == pattern_str[j] ){
i++;
j++;
}
else
j = next[j];
}
if(j == pattern_len)
printf("first num is %d\n", i - pattern_len + 1);
else
printf("no pattern\n");
}