ch4字符串.ppt
《ch4字符串.ppt》由会员分享,可在线阅读,更多相关《ch4字符串.ppt(36页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、一、主要内容:一、主要内容:1、串类型的定义 2、串的表示和实现 3、串操作的应用举例二、基本要求:二、基本要求:了解串的应用;掌握串的基本概念、顺序和链式存储结构;掌握串的各种基本运算;熟练掌握顺序存储结构上串的各种操作。第四章第四章 字符串字符串目录目录4.1串的类型和定义4.2串的表示和实现4.3 串的模式匹配算法4.1 4.1 串类型的定义串类型的定义一、串和基本概念一、串和基本概念非数值处理的对象基本上是字符串数据串(string)(或称字符串)-由零个或多个字符组成的有限序列记为:s=“a1a2.an”(n=0)ai(1=i=0数据关系:R1=ai-1.,aj|ai属于D,i=2,
2、.n。基本操作:StrAssign(&T,chars);StrCopy(&T,S);StrEmpty(S);StrCompare(S,T);StrLength(S);ClearString(&S);Concat(&T,S1,S2);Substring(&Sub,S,pos,len);Index(S,T,pos);Replace(&S,T,V);StrInsert(&S,pos,T);StrDelete(&S,pos,len);DestroyString(&S)ADT String三、三、串的基本运算概述串的基本运算概述为为描描述述方方便便,假假定定用用大大写写字字母母表表示示串串名名,小小写写
3、字字母母表表示组成串的字符。示组成串的字符。1.串复制 StrCpy(&S,T)表示将T串的值赋给S串。2.联接 Concat(&S,T1,T2)表示将T1串和T2串联接起来,返回到S串中。3.求串长度 StrLen(T)求T串的长度。4.子串 substring(&S,T,i,len)表示截取S串中从第i个字符开始连续len个字符,作为S的一个子串,存入T串。5串比较大小 StrCmp(S,T)比较S串和T串的大小,若ST,函数值为正。6.串插入 SInsert(&S,i,T)在S串的第i个位置插入T串。7.串删除 SDelete(&S,i,len)删除串S中从第i个字符开始连续len个字符
4、。8.求子串位置 index(S,T)求T子串在S主串中首次出现的位置,若T串不是S串的子串,则位置为零。9.串替换 Replace(&S,T,V)将S串中出现所有与T相等的子串,用V串替换。利用上述九种基本运算还可以组合成字符串的其他有关操作.4.2 4.2 串的表示和实现串的表示和实现顺序表示4.2.1 定长顺序表示4.2.2 堆分配存贮表示链式表示4.2.3 块链存贮表示用一组连续的存储单元存储串值的字符序列.在 C语 言 中,用 字 符“0”表 示 串 的 终 结,“0”不计入串长.另一种方法是定长数组表示一个串:#define MAXSTRLEN 255 /串的长度最大为串的长度最大
5、为255typedef unsigned char SStringMAXSTRLEN+1;/0号单元存放串的长度号单元存放串的长度,其最大值刚好是其最大值刚好是255.b当超出255个字符时,串的多余内容被舍去,叫做“截断”b以下用串联结和求子串为例介绍这种存储4.2.1 定长顺序存储表示定长顺序存储表示 对串长有两种表示方法:对串长有两种表示方法:(1 1)可使用一个不会出现在串中的特殊字符在)可使用一个不会出现在串中的特殊字符在串值的尾部来表示串的结束。例如,串值的尾部来表示串的结束。例如,C C语言中语言中以字符以字符00表示串值的终结表示串值的终结,这就是为什,这就是为什么在上述定义中
6、,串空间最大值么在上述定义中,串空间最大值maxstrlenmaxstrlen为为256256,但最多只能存放,但最多只能存放255255个字符的原因,因个字符的原因,因为必须留一个字节来存放为必须留一个字节来存放00字符。字符。(2 2)可用下标为零的数据元素来存储串的长度可用下标为零的数据元素来存储串的长度。如:如:PASCALPASCAL语言中的串类型就采用这种方法。语言中的串类型就采用这种方法。分分析析:进行串连接时,由于存储空间有限,连接后的串的长度不确定,所以存在三种情况存在三种情况:(1)两个串的长度之和小于最大存储量两个串的长度之和小于最大存储量:将两个串进行连接。(2)两个串
7、的长度之和大于最大存储值两个串的长度之和大于最大存储值,但第一个串但第一个串的长度比最大存储值要小的长度比最大存储值要小:将第二个串的部分进行连接,长出的部分采用截尾法截尾法处理。(3)连接时第一个串连接时第一个串就已将存储空间用完就已将存储空间用完:不进行连接。v算法4.2:Concat(&T,S1,S2)串联结 实现算法:实现算法:/用T返回S1和S2联接成的新串,若未截断,返回TRUE,否则返回FALSEStatus Concat(SString T,SString S1,SString S2)L1=strLength(S1);L2=strLength(S2);if(strLength(
8、S1)+strLength(S2)=MAXSTRLEN)T0,L1 1 =S1 0,L1-1;TL1,L1+L2 1 =S2 0,L2 1;T L1+L2 =0;return TRUE;else if(L1 MAXSTRLEN)T 0,L1 1 =S1 0,L1 1;T L1,MAXSTRLEN 1 =S2 0,MAXSTRLEN L1-1;T MAXSTRLEN =0;elseT0,L1 =S10,L1;return FALSE;Concat(&T,S1,S2)的算法示意图S1S2T0 maxstrlen0 maxstrlenS10+S20 MAXSTRLEN 时截断部分 分析:分析:求s中
9、从第pos个字符开始长度为len的子串。需判定所给的pos(pos=1&pos=0&len=s.len-pos+1)范围是否合法。实现算法:实现算法:Status SubString(SString Sub,SString S,int pos,int len)/用Sub返回串S的第pos个字符起长度为len的子串。/其中,1posStrLength(S)且0lenStrLength(S)-pos+1。if(pos1|posS0|len0|lenS0-pos+1)return ERROR;Sub1lenSpospos+len-1;Sub0len;return 0K;/SubStrlng2.求子串
10、SubString(&Sub,S,pos,len)算法4.3SSub1 poslen也是用一组连续的存储单元存储串值的字符序列.但存储空间是在程序执行过程中动态分配得到的-动动态态存储分配的顺序表存储分配的顺序表.在C语言中,用字符“0”表示串的终结,“0”不计入串长.typedef struct char*ch;/若是非空串,则按实际长度分配,否则为NULL;int length;/串长度 HString;4.2.2 堆分配存储表示堆分配存储表示HString s;s.ch=NULL;s.length=0;堆分配存贮表示_初始化lengthchsStatus StrInsert(HStrin
11、g&S,int pos,HString T)/1=pos=StrLength(S)+1。在串S的第pos个字符之前插入串T。if(pos S.length)return ERROR;/pos 不合法 if(T.length)/T 非空,则要重新分配空间,插入T if(!(S.cj=(char*)realloc(S.ch,(S.length+T.length)*sizeof(char)exit(OVERFLOW);for(i=S.length-1;i=pos-1;-i)/为插入T而腾出位置 S.chi+T.length=S.chi;S.chpos-1.pos+T.length-2=T.ch0.T
12、.length-1;/插入T S.length+=T.length;/if return OK;/StrInsertv算法4.4:StrInsert(&S,pos,T)串插入 Status Concat(HString&T,HString S1,HString S2)if(T.pChar)free(T.pChar);/若T非空,则释放空间/申请空间T.pChar=(char*)malloc(S1.nLength+S2.nLength)*sizeof(char);if(!T.pChar)return OVERFLOW;/计算长度T.nLength=S1.nLength+S2.nLength;/C
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ch4 字符串
限制150内