1.BF算法
#include <stdio.h>#include <stdlib.h>#include "string.h"// 返回子串T在主串S中的位置// 若不存在,则返回0// T非空,1 <= strlen(S)int index( char* S, char* T){int i = 0; // i用于主串S中当前位置下标int j = 0; // j用于子串T中当前位置下标while( i <= strlen(S) && j < strlen(T) ) // i或j其中一个到达尾部即终止搜索!{if( S[i] == T[j] ) // 若相等则继续下一个元素匹配{i++;j++;}else // 若失配则j回溯到第一个元素从新匹配{i = i-j+2; // i回溯到上次匹配首位的下一个元素,这是效率低下的关键!j = 0;}}if( j >= strlen(T) ){return i - strlen(T);}else{return -1;}}int main(){int a;char* S = "012345rtyuio";char* T = "rtyu";a = index(S,T);printf("%d",a);return 0;}

