Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <time.h>
- int bmh(char *str, char *pattern, int fpos);
- int main(void)
- {
- char src[16];
- char seek[] = "vasyan";
- int ret = 0;
- int sz = strlen(seek);
- FILE *fp = fopen("test.txt", "r");
- if(fp == NULL) {
- printf("fopen error\n");
- return 1;
- }
- ret = fread(src, sizeof(char), 15, fp);
- src[ret] = '\0';
- int fpos = 0;
- printf("Seek for substring: %s\n", seek);
- while(1){
- ret = bmh(src, seek, fpos);
- if(ret >= 0) {
- fpos += ret;
- break;
- } else {
- fpos += strlen(src) - sz + 1;
- }
- memmove(src, &src[16-sz-1], sz);
- ret = fread(&src[sz], sizeof(char), 15-sz, fp);
- if(ret == 0) {
- ret = -1;
- break;
- }
- }
- if(ret >= 0)
- printf("Substring found at %d\n", fpos);
- else
- printf("Substring not found\n");
- return 0;
- }
- int bmh(char *str, char *pattern, int fpos)
- {
- int shift[256];
- int n = strlen(str);
- int m = strlen(pattern);
- char ch, lastch;
- for(int i=0;i<256;i++)
- shift[i] = m;
- for(int i=0;i<m-1;i++)
- shift[pattern[i]] = m - i - 1;
- lastch = pattern[m - 1];
- for(int i=0;i<=n-m;i+=shift[ch]) {
- ch = str[i+m-1];
- if(ch == lastch) {
- if(memcmp(&str[i], pattern, m-1) == 0)
- return i;
- }
- }
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement