#define MAXSIZE 255
#include<stdio.h>
#include<string.h>
//定义定长顺序存储的串结构
typedef struct{
char ch[MAXSIZE];
int length;
}SString;
//定义堆存储的串结构
typedef struct{
char *ch;
int length;
}HString;
//常见的串的基本操作
//将串T赋值为chars
void StringAssign(SString &T, SString chars){};
//将串S复制得到T
void StrCopy(SString &T, SString S){};
//判空操作
void StrEmpty(SString S){};
//比较操作
void StrCompare(SString S, SString T){};
//求串长
void StrLength(SString S){};
//求子串
void SubString(SString &sub, SString S, pos, len){};
//串联接
void Concat(SString &T, SString S1, SString S2){};
//定位操作
int Index(SString S, SString T){};
//清空串
void ClearString(SString &S){};
//销毁字符串
void DestroyString(SString &S){};
//串暴力模式匹配BF算法
//注意这里的SString第一个未知不存储数据元素
int Index(SString S,SString T){
int i=1,j=1;
while (i <= S.length && j <= T.length){
if(T.ch[i]==S.ch[j]){
i++;
j++;
}
else{
i = i-j+2;
j=1;
}
};
if(j>T.length){return i-T.length;}
return 0;
}
//KMP算法
int Index_KMP(SString S, SString T, int next[]){
int i=1,j=1;
while (i <= S.length && j <= T.length){
if (S.ch[i]==T.ch[j]){
i++;
j++;
}
else{
j = next[j];
}
}
if ( j > T.length ){return i-T.length;}
return 0;
}
int main(){
SString S;
SString T;
strcpy(S.ch," abcdef");
S.length = 6;
strcpy(T.ch," d");
T.length = 1;
int res = Index(S,T);
printf("%d \n",res);
return 0;
}