void preprocpat( pat, next )
char *pat;
int next[];
{ int i, j;
i = 0;
j = next[0] = -1;
do { if( j==(-1) || pat[i]==pat[j] ) {
i++;
j++;
next[i] = (pat[j]==pat[i]) ? next[j] : j;
}
else j = next[j]; }
while( pat[i] != EOS );
}
char *search( pat, text )
char *pat, *text;
{ int next[MAXPATLEN], j;
if( *pat == EOS ) return( text );
preprocpat( pat, next );
for( j=0; *text != EOS; ) {
if( j==(-1) || pat[j] == *text ) {
text++; j++;
if( pat[j] == EOS ) return( text-j );
}
else j = next[j];
}
return( NULL );
}
|