串:
串是一种内容受限的线性表。
与线性表基本操作不同的是,串是以“串的整体”作为操作对象的。
考虑到存储效率和算法的方便性, 串多采用顺序存储结构。
BF算法:
算法思想简明,从始位置开始逐一匹配,匹配成功继续下一个,若失败则回溯:
主串的指针i总是回溯到 i-j+2 位置,
模式串的指针总是恢复到首字符位置 j= 1
代码如下:
( 为了方便说明问题,算法描述当中所用到的顺序存储的字符串都是从下标为1的数组分量开始存储的, 下标为0的分量闲置不用)
#include<stdio.h>
#define MAXLEN 255
//串的顺序存储
typedef struct
{
char ch[MAXLEN + 1]; //0号不用,从1开始
int length; //串的当前长度
}SString;
//BF算法
//返回模式T在主串s中第pos个字符开始第一次出现的位置。若不存在, 则返回值为0
int Index_BF(SString S, SString T, int pos)
{
int i = pos; //主串起始位置
int j =