BF算法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxLength 100
typedef struct SString
{
char ch[MaxLength];
int length;
}SString;
void InitSString(SString* S)//初始化串
{
S->length = 0;
}
void StrAssign(SString* S, char arr[])
{
int i = 0;
int x = sizeof(arr) / sizeof(arr[0]);
if (MaxLength < x)
printf("超出了串的长度,赋值失败\n");
for (i =0; arr[i]!='\0'; i++)
{
S->ch[i+1] = arr[i];
}
S->length = i;
printf("赋值成功\n");
}
int Index(SString S, SString L)
{
int i = 1, j = 1;
while (i <= S.length && j <= L.length)
{
if (S.ch[i] == L.ch[j])
{
++i;
++j;
}
else
{
i = i - j + 2;//i指向下一个子串的首位置
j = 1;
}
}
if (j > L.length) //因为j指向下一个元素,若超过了l的长度则说明前面的元素均相等
return i - L.length;
else
return -1;
}
int main()
{
SString S;
SString L;
InitSString(&S);
InitSString(&L);
StrAssign(&S,"ILOVEGUANGKEILIKECOMPUTER");
StrAssign(&L,"COMPUTER");
int i = 0;
for (i = 1; i <= S.length; i++)
{
printf("%c", S.ch[i]);
}
printf("\n");
for (i = 1; i <= L.length; i++)
{
printf("%c", L.ch[i]);
}
int y = 0;
printf("\n");
y = Index(S, L);
printf("%d", y);
return 0;
}
KMP算法
int Index_KMP(SString S, SString L,int next[])
{
int i = 1, j = 1;
while (i <= S.length && j <= L.length)
{
if (j==0 || S.ch[i] == L.ch[j])
{
++i;
++j;
}
else
{
//i = i - j + 2;//i指向下一个子串的首位置
//j = 1;
j = next[j];
}
}
if (j > L.length) //因为j指向下一个元素,若超过了l的长度则说明前面的元素均相等
return i - L.length;
else
return 0;
}