1.相关概念
(1)字符串:由零个或多个字符组成的有限序列。
(2)子串:一个串中任意个连续字符组成的子序列(含空串)称为该串的子串。
真子串是不包含自身的所有子串。
(3)主串:包含子串的串相应的称为主串
(4)字符位置:字符在序列中的序号为该字符在串中的位置
(5)子串位置:子串第一个字符在主串中的位置
(6)空格串:由一个或多个空格组成的串(与空串不同)
(7)串相等:当且仅当两个串的长度相等并对应位置上的字符都相等时,这两个串才是相等的。
所有空串是相等的。
2、串的类型定义
数据对象:
数据关系:
基本操作:(1)StrAssign(&T,chars) //串赋值
(2)StrCompare(S,T) //串比较
(3)StrLength(S) //求串长
(4)Concat(&T,S1,S2) //串连接
(5)SubString(&Sub,S,pos,len) //求子串
(6)StrCopy(&T,S) //串拷贝
(7)StrEmpty(S) //串判空
(8)ClearString(&S) //清空串
(9)Index(S,T,pos) //子串的位置
(10)Replace(&S,T,V) //串替换
(11)StrInter(&S,pos,T) //子串插入
(12)StrDelete(&S,pos,len) //子串删除
(13)DestroyString(&S) //串销毁
3.串的模式匹配算法
(1)算法目的:确定主串中所含子串(模式串)第一次出现的位置(定位)
(2)算法种类:
①BF算法(Brute-Force,又称古典的、经典的、朴素的),也称简单匹配算法。采用穷举法的思路。
S:a a a a b c d 主串:正文串
T: a b c 子串:模式
Index(S,T,pos)
算法思想:从s的每一个字符开始依次与T的字符进行匹配。将主串的第pos个字符和模式串的第一个字符比较,若相等,继续逐个比较后续字符,若不等,从主串的下一字符起,重新与模式串的第一个字符比较。直到主串的一个连续子串字符序列第一个字符的序号与模式串相等。返回值为S中与T匹配的子序列第一个字符的符号,即匹配成功;否则匹配失败,返回值0。
②KMP算法(特点:速度快)
定义next[j]函数,表明当模式中第j个字符与主串中相应字符“失配”时,在模式中需重新和主串中该字符进行比较的字符的位置。
next[1]=0,然后比较J之前的字符串:从最后一个字符开始与第一个字符相比,最后两个字符与前两个字符相比,最后三个字符与前三个字符相比......直到j之前的整个字符串(不包括该串,比较自身),next[j]的对应的值就是把最大公共前缀+1。