串的基础知识

定义

串:是由0个或多个字符组成的有限序列,又叫字符串。S=‘a1a2…an’(n>=0)
空串:长度n=0的串,不包含任何字符。
空格串:是仅由一个或多个空格组成的串,长度>=1。
子串:串中任意个连续的字符组成的子序列。
主串:包含子串的串相应的称为主串。
位置:字符在序列中的序号,子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。
相等:两个串的长度相等,并且对应位置的字符都相等。

串的存储结构

对串的存储方式取决于我们对串所进行的运算,如果在程序设计语言中,串的运算只是作为输入或输出的常量出现,则此时只需存储该串的字符序列,这就是串值的存储。此外,一个字符序列还可赋给一个串变量,操作运算时通过串变量名访问串值。
对于串的存储可以有两种处理方式:一是可以将串定义为字符型数组,数组名就是串名,串的存储空间分配在编译时完成,程序运行时不能更改。这种方式为串的静态存储结构。另一种是定义字符指针变量,存储串值的首地址,通过字符指针变量名访问串值,串的存储空间分配是在程序运行时动态分配的,这种方式称为串的动态存储结构
静态存储采用顺序存储结构,动态存储采用的是链式存储和堆存储结构。
详细可见https://wenku.baidu.com/view/ed30c857c5da50e2524d7fb5.html

基本操作

串插入StrInsert(S,pos,T)

初始条件:串S和T存在,1<=pos<=StrLength(S)+1。
操作结果:在串S的下标为pos的字符之前插入串T。

例如:S=‘chater’,T=‘rac’,执行StrInsert(S,4,T)之后S=‘character’。

串删除StrDelete(S,pos,len)

初始条件:串S存在,1<=pos<=Length(S),且0<=len<=Length(S)-pos+1。
操作结果:从串S中删除 下标为pos的字符起 长度为len的子串。

例如:S=‘chapter’,执行StrDelete(S,5,3)之后S=‘chap’。
S=‘chapter’,执行StrDelete(S,5,4)是bug

串连接StrCat(S,T)

初始条件:串S和T存在。
操作结果:返回由S和T连接而成的新串。

例如:S=‘man’,执行StrCat(S,‘kind’)之后S=‘mankind’

求子串SubString(Sub,S,pos,len)

初始条件:S存在,1<=pos<=Length(S) 且 0<=len<=Length(S)-pos+1(pos+len-1<=Length(S))。
操作结果:用Sub返回串S的第pos个字符起长度为len的子串。

例如:SubString(sub1,‘commander’,4,3) sub1=‘man’

求位置StrIndex(S,pos,T)

初始条件:主串S和T存在,T是非空串。
操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中从第pos个字符开始第一次出现的位置;否则函数值为0。

例如:S=‘abacsdacs’,执行StrIndex(S,2,‘acs’)返回3

串替换StrReplace(S,T,V)

初始条件:串S,T,V均存在,且T是非空串。
操作结果:用串V替换主串S中出现的所有与T相等的不重叠的子串。

例如:S=‘abcaabcaaa’,T=‘bca’,V=‘x’,执行之后S=‘axaxaa’

串的模式匹配

BF模式匹配算法

主串S中的子串与模式串T进行从前到后依次比较,直到找到相同的子串为止,返回子串在主串中的位置pos,否则匹配不成功。时间复杂度为O(m*n)。

BF算法思想是:将S中的第一个字符与T中的第一个符进行比较,若不同,就将S中的第二个字符与T中的第一个字符进行比较,…直到S的某一个字符和T的第一个字符相同;再将它们之后的字符进行比较,若也相同,则如此继续往下比较;依此类推,重复上述过程。

int Index(SString S,SString T){
   
	int i=pos,j=1;
	while(i<=S.len && j<
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值