[Home]
[Contents]
[Chapter]
[Previous Algorithm]
[Next Algorithm]


Karp-Rabin string searching (Pascal version available)


#define B 131 char *search( pat, text ) char *pat, *text; { int hpat, htext, Bm, j, m; if( pat[0]==EOS ) return( text ); Bm = 1; hpat = htext = 0; for( m=0; text[m] != EOS && pat[m] != EOS; m++ ) { Bm *= B; hpat = hpat*B + pat[m]; htext = htext*B + text[m]; } if( text[m]==EOS && pat[m]!=EOS ) return( NULL ); for( j=m; TRUE; j++ ) { if( hpat==htext && strncmp(text+j-m,pat,m)==0 ) return( text+j-m ); if( text[j]==EOS ) return( NULL ); htext = htext*B - text[j-m]*Bm + text[j]; } }

C source (715.srch.c) Pascal source (715.srch.p)



© Addison-Wesley Publishing Co. Inc.