# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
# define MAXSTRLEN 255
typedef unsigned char Sstring [MAXSTRLEN + 1];
int index (Sstring S, Sstring T)
{
int i = 1;
int j = 1;
while (i <= S[0] && j <= T[0]) //S是主串,T是模式串
//前半部分写成i <= (S[0] - T[0] + 1)会控制住匹配完成后不会把j加出T[0]的范围
//从而影响到对匹配是否完成的判断,所以应该写成i <= s[0]
{
if (S[i] == T[j])
{
++i;
++j;
printf("相等都加一, i = %d, j = %d\n", i, j);
}
else
{
i = i - j + 2;
j = 1;
printf("不等往回跳, i = %d, j = %d\n", i, j);
}
}
if (j > T[0])
{
return i - T[0];
}
return 0;
}
int main(void)
{
Sstring S;
Sstring T;
S[0] = 15;
S[1] = 'a';
S[2] = 'b';
S[3] = 'c';
S[4] = 'a';
S[5] = 'b';
S[6] = 'c';
S[7] = 'a';
S[8] = 'a';
S[9] = 'b';
S[10] = 'c';
S[11] = 'b';
S[12] = 'a';
S[13] = 'a';
S[14] = 'b';
S[15] = 'c';
S[16] = 0;
T[0] = 5;
T[1] = 'a';
T[2] = 'b';
T[3] = 'c';
T[4] = 'b';
T[5] = 'a';
S[6] = 0;
printf("从第%d个字符开始成功匹配!\n", index(S, T));
return 0;
}