参考《数据结构(C语言版)》- 严蔚敏 吴伟民 - 清华大学出版社
串的结构定义
typedef unsigned char SString[MAXSTRLEN + 1]; //字符型数组
串的初始化
void Init_String(SString S)
{
printf("字符串长度:");
scanf_s("%d", &S[0]);
printf("\n请输入字符串:");
getchar(); //吸收换行符,否则scanf自动接收\n
for (int i = 1; i <= S[0]; i++)
scanf_s("%c", &S[i]);
printf("\n");
getchar(); //同上
}
获得模式串的next[]
void get_index_2(SString T, int next[])
{
int j = 3; next[1] = 0, next[2] = 1; //按照规则,第一位为0,第二位为1,从第三位开始
while (j <= T[0])
{
for (int k = 2; k < j; k++) //1<k<j,对每个k都要判断
{
int i = 1;
for (i; i < k; i++) //逐个对比'p1...pk-1'和'pj-k+1...pj-1'
if (T[i] != T[j - k + i]) //存在一个字符不同则