/*============================================================================
Name : Exercise.cpp
Author : Haier
Version : 1.01
Copyright : Copyright (c) 2014
Description : KmpSearch in C, Ansi-style, Compile by Eclipse
============================================================================*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const char *KmpSearch(const char *OriString,const char *SubString)
{
int *T;
int i,j;
const char *Position=NULL;
if(SubString[0]=='\0')
{
return OriString;
}
T=(int*)malloc((strlen(SubString)+1)*sizeof(int));
T[0]=-1;
/* Construct the lookup table */
for(i=0; SubString[i]!='\0'; i++)
{
T[i+1]=T[i]+1;
while(T[i+1]>0 && SubString[i]!=SubString[T[i+1]-1])
{
T[i+1] = T[T[i+1]-1]+1;
}
}
/* Perform the search */
for(i=j=0; OriString[i]!='\0';)
{
if(j<0 || OriString[i]==SubString[j])
{
i++,j++;
if(SubString[j]=='\0')
{
Position=OriString+i-j;
break;
}
}
else
{
j=T[j];
}
}
free(T);
return Position;
}
int main()
{
char *MyString="Hello";
char *Test ="e";
printf("%s",KmpSearch(MyString,Test));
return 0;
}