先上传一个朴素的字符串匹配算法.。
他用一个循环来找出全部的有效位移,这个循环对n-m+1个可能的s每一个每一个字符检测条件P【1~m】 = T【s+1 ~ s+m 】 。n是母串的长度,m是子串的长度。
具体的代码如下:
#include <stdio.h>
#include <string.h>
int string_matcher(char *src,char *ptn){
int i=0,j=0;
int slen = strlen(src);
int plen = strlen(ptn);
while(j<plen && i<slen){
if(src[i] == ptn[j]){
i++;
j++;
}
else {
i = i - j + 1;
j = 0;
}
}
if(j == plen)
return i-plen;
else
return -1;
}
int main(){
char *T = "bacbababacabcbab";
char *P = "ababaca";
printf("%s\n",T);
int loc = string_matcher(T,P);
int n = loc;
while(n--)printf(" ");
printf("%s\n",P);
printf("%d\n",loc);
getchar();
return 0;
}
示例结果: