Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <limits.h>
- const char *search(const char *text, const char *pattern)
- {
- int num = strlen(pattern),i=0;
- unsigned long X;
- unsigned long mask[CHAR_MAX+1];
- if (pattern[0] == '\0')
- return text;
- if (num > 31)
- return "The pattern is too long!";
- X = ~1;
- for (i=0; i <= CHAR_MAX; ++i)
- mask[i] = ~0;
- for (i=0; i < num; ++i)
- mask[pattern[i]] &= ~(1UL << i);
- for (i=0; text[i] != '\0'; ++i)
- {
- X |= mask[text[i]];
- X <<= 1;
- if (!(X & (1UL << num)))
- return (text + i - num) + 1;
- }
- return NULL;
- }
- int main()
- {
- puts(search("ola cara","macaco"));
- puts(search("ola cara","cara"));
- puts(search("ola cara","la"));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment