Advertisement
Guest User

Untitled

a guest
Jun 22nd, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.57 KB | None | 0 0
  1. // string.h
  2. // limits.h
  3.  
  4. int SearchString(const char *text, const char *pattern)
  5. {
  6.     int m = strlen(pattern);
  7.     unsigned long R;
  8.     unsigned long patternMask[CHAR_MAX + 1];
  9.     int i;
  10.  
  11.     if (pattern[0] == '\0') return 0;
  12.     if (m > 31) return -1; //Error: The pattern is too long!
  13.  
  14.     R = ~1;
  15.  
  16.     for (i = 0; i <= CHAR_MAX; ++i)
  17.         patternMask[i] = ~0;
  18.  
  19.     for (i = 0; i < m; ++i)
  20.         patternMask[pattern[i]] &= ~(1UL << i);
  21.  
  22.     for (i = 0; text[i] != '\0'; ++i)
  23.     {
  24.         R |= patternMask[text[i]];
  25.         R <<= 1;
  26.  
  27.         if (0 == (R & (1UL << m)))
  28.             return (i - m) + 1;
  29.     }
  30.  
  31.     return -1;
  32. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement