- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* 第4章 串 4.1 串类型的定义 4.2 串的表示和实现 4.3 串的模式匹配算法 * 4.1 串类型的定义 一、基本概念 串(String):零个或多个字符组成的有限序列。 记作S=‘a1a2a3…an’ 其中S 是串名,引号括起来的字符序列是串值;ai(1≦i≦n)可以是字母、数字或其它字符; 串长:串中所包含的字符个数。 空串:长度为零的串,它不包含任何字符。 空格串:由一个或多个空格组成的串 注意:空串和空格串的不同,例如“ ”和“”分别表示长度为1的空格串和长度为0的空串。 * 子串:串中任意个连续字符组成的子序列。 主串:包含子串的串。 子串在主串中的序号(或位置):子串在主串中首次出现时,该子串的首字符对应的主串中的序号。 例如,设A和B分别为 A=“This is a string” B=“is” 则B是A的子串,A为主串。B在A中出现了两次,其中 首次出现所对应的主串位置是3。因此,称B在A中的 序号(或位置)为3。 空串是任意串的子串,任意串是其自身的子串。 * 二、串的抽象数据定义 串的抽象数据类型定义:书P71 串的ADT中,共定义了13种操作。 最小操作子集:串赋值StrAssign 串比较StrCompare 求串长StrLength 串联接Concat 求子串SubString * 例1 定位函数Index(S,T.pos) 若主串S中第pos个字符之后存在和串T值相同的子串,则返回第一个这样的子串在S中的位置,否则返回0。 基本思想:从主串S中取“第 i =pos个字符起、长度和T相等的 子串“和串T比较,若相等,则求得函数值为 i,否则 i 值增 1直至找到和串T相等的子串或者串S中不存在和T相等的子 串为止。即求使下列等式成立的 i 值。StrCompare(SubString(S,i,StrLength(T)),T)==0i 的初值应为 pos,在找不到的情况下, i 的终值应该是 n-m+1,其中,n 为S串的长度,m 为T串的 长度。 * int index(String S,String T,int pos){ if(pos0){ n=StrLen(S); m=StrLen(T); i=pos; while(i=n-m+1){ SubString(sub,S,i,m); if(StrCompare(sub,T)!=0) i++; else return i; } } return 0 ; } * 4.2 串的表示和实现 因为串是特殊的线性表,故其存储结构与线性 表的存储结构类似。只不过由于组成串的元素是单 个字符。串有三种机内表示方法(存储方法)。 4.2.1定长顺序存储表示 1.类型定义 用一组连续的存储单元来存放串中的字符序列。 所谓定长顺序存储结构,是直接使用定长的字符数 组来定义,数组的上界预先给出: #define MAXSTRLEN 255 typedef unsigned char SString[MAXSTRLEN+1]; SString s;//s是一个可容纳255个字符的顺序串。 * 关于串长: (1)下标为0的分量存放串的长度,如PASCAL (2)串值后加一个不计入串长的结束标记字符。 如C/C++语言中,以字符‵\0′表示串值的结束。 * 2.一些操作的实现 (1)串联接Concat(T,S1,S2) Char * Concat( SString S1, SString S2, SString T) { // 以T返回由S1和S2联接而成的新串 j=0; k=0; while ( S1[j] != \0) T[k++] = S1[j++]; // 复制串 S1 j = 0; while ( S2[j] != \0‘k MAXSTRLEN) T[k++] = S2[j++]; // 紧接着复制串 S2 T[k] = ‘\0’; // 置结果串T的结束标志 return T; } * (2)求子串SubString(Sub,S,pos,len) bool SubString ( SString Sub, SString S, int pos, int len ) {//
文档评论(0)