C语言字符串匹配函数

C语言字符串匹配函数,保存有需要时可以用:

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <assert.h> 5 #include <time.h>pattern: 9 pos:badShift[256];goodPostfixLastPos(const char *pattern,int pos) 16 { 17 #define _break(flag) if(flag){ break;}flag = 0; 20int len = strlen(pattern); 21int postFix_len = len – pos; 22int postFix_position = pos; 23int initStart = pos – postFix_len; 24int last_start = 0; 25while(postFix_len) 26 { 27last_start = (postFix_position == pos) ?initStart:0; 28int postFix_start = postFix_position; 29for(;last_start>=0 && postFix_start<len;last_start++,postFix_start++) 30 { 31flag = (pattern[last_start] == pattern[postFix_start]); 32_break(!flag); 33 34 } 35 36 _break(flag); 37if(initStart >= 0) 38 { 39initStart–; 40 }{ 43postFix_position++; 44postFix_len–; 45 } 46 }flag?last_start-1:-1; 49 }*calc_goodPostfixShift(const char *pattern,int *goodShift) 52 { 53int len = strlen(pattern); 54for(int i=0;i<len;i++) 55 { 56goodShift[i] = len – goodPostfixLastPos(pattern,i) – 1; 57 } goodShift; 60 }*clac_badcharShift(const char *ptrn) 63 { 64int i; 65int pLen = strlen(ptrn);(i = 0; i < 256; i++) 68 { 69*(badShift+i) = pLen; 70 }(pLen != 0) 73 { 74*(badShift+(unsigned char)*ptrn++) = –pLen; 75 } badShift; 78 }BMSearch(*pattern) 81 { goodShift[strlen(pattern)]; 84int len1 = strlen(str); 85int len2 = strlen(pattern); 86 87 clac_badcharShift(pattern); 88 calc_goodPostfixShift(pattern,goodShift); 89for(int i=len2 – 1;i<len1;) 90 { 91int start = i; 92int pos_pattern = len2 – 1; 93for(;pos_pattern>=0;pos_pattern–,start–) 94 { 95if(str[start] != pattern[pos_pattern]) 96 { 97break; 98 } 99 }100if(pos_pattern < 0)101 {102return start + 1;103 }(pos_pattern == (len2 – 1))106 {107i += badShift[str[start]];108 }{111i += goodShift[pos_pattern + 1];112 }113 }-1;116 },福报够的人,从来就没听到过是非。

C语言字符串匹配函数

相关文章:

你感兴趣的文章:

标签云: