文章目录
- 串(String)---- 零个或多个任意字符组成的有限序列
- 串的定义----几个术语
- 串的类型定义,存储结构及运算
- 串的顺序串结构
- 串的链式串结构
- 串的链式结构
- 串的模式匹配算法----BF算法
串(String)---- 零个或多个任意字符组成的有限序列
串的定义----几个术语
- 子串:串中任意个连续字符组成的子序列称为该串的子串。
- 主串:包含子串的串相应地称为主串。
- 字符位置:字符在序列中的序号为该字符在串中的位置。
- 子串位置:子串第一个字符在主串中的位置。
- 空格串:由一个或多个空格组成的串,与空串不同。
- 串相等:当且仅当两个串的长度相等并且各个对应位置上的字符相同时,这两个串才相等。(所有的空串是相等)。
串的类型定义,存储结构及运算
ATD String{
数据对象
数据关系
基本操作
}
串的顺序串结构
//串的顺序存储结构
typedef struct {
char ch[MAXLEN + 1];//一维数组存数据
int length;//串的长度
}SString;
串的链式串结构
//串的链式存储结构
typedef struct Chunk{
char ch[CHUNKSIZE];
struct Chunk* next;
}Chunk;
typedef struct {
Chunk* head, * tail;//串的头指针,尾指针
int curlen;//串的当前长度
}LString;//字符串的块链结构
串的链式结构
因为链式结构操作方便,但存储密度很大。
所以改变方式就是在一个串的每一个结点存储多个字符。
串的模式匹配算法----BF算法
采用穷举法
B-F简称为BF算法,简称为单匹配算法。
算法的思路是从每一个字符开始依次与T的字符进行匹配。
Index(S,T,pos)
- 将主串的第pos个字符和模式串的第一个字符比较,
- 若相等,继续逐个比较后续字符;
- 若不等,从主串的下一个字符起,重新与模式串的第一个字符作比较。
直到主串的一个连续字符序列与模式串相等。返回值为S中与T匹配的子序列的第一个字符的序号,即匹配成功。
否则,匹配失败,返回值0;
int IndexBF(SString S, SString T,int pos) {
int i = pos, j = 1;
while (i<=S.length && j<=T.length)
{
if (S.ch[i] == T.ch[j]) {
++i, ++j;//主串和子串依次匹配下一个字符
}
else {
i = i - j + 2;//主串,子串指针回溯重新开始下一次匹配
j = 1;
}
if (j >= T.length) {
return i - T.length;//返回匹配的第一个字符的下标
}
else {
return 0;//模式匹配不成功
}
}
}