VBPPT教程知适合初学者4.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VBPPT教程知适合初学者4

第四章 串 学习要点 掌握串的基本操作以及串操作在不同存储结构下的实现。 理解串的模式匹配算法。 4.1 串类型的定义 1.串的定义   串( string) 是由零个或多个字符组成的有限序列,一般记作S=“a1a2a3…an” ,其中S为串的名字,用双引号括起来的字符序列是串值,但两边的双引号不算作串值,不包含在串中。ai(1≤i≤n)可以是字母、数字或其它字符。n为串中字符的个数,称为串的长度。 2.空串   长度为零的串称为空串(Empty String),它不包含任何字符,记为s=“”。通常将仅由一个或多个空格组成的串称为空白串(Blank String)。   注意:空串和空白串的不同,例如“ ”和“”分别表示长度为1的空白串和长度为0的空串。 3.子串、主串   若一个串是另一个串中连续的一段,则这个串称为另一个串的子串,而另一个串相对于该串称为主串。通常将子串在主串中首次出现时的该子串的首字符对应的主串中的序号,定义为子串在主串中的序号(或位置)。   例如,串s1=“abcd”,s2=“fabcdef”,则s1为s2的子串,s2相对于s1为主串。   再如,串s1 =“is”,s2 =“This is a string”,则s1为s2的子串, s2相对于s1为主串。 s1在s2中出现了两次,其中首次出现所对应的主串位置是3。因此,称s1在s2中的序号为3。      另外: 空串是任意串的子串,任意串是其自身的子串。 1.串赋值 void StrAssign(HString *s1,HString *s2){ int i=0,len=s2-length; if(len0||free+lenMAXSIZE) print(“错误,不能赋值!”) else{ for(i=0;ilen;i++) store[free+i]=s2[i]; s1-straddr=free; s1-length=len; free=free+len; } } 2.求子串 void SubStr(HString *sub,HString s,int i,int len){ if(len0||i1||lens.length-i+1) print(“参数错误,不能求子串!”) else{ sub-straddr=s.straddr+i-1; sub-length=len; } } 串的链式存储结构的特性: 串的链接存储结构有时称为链串。 链串的存储形式与一般的链表类似,是将存储区分成许多结点,每个结点有一个存放字符的数据域和一个存放指向下一个结点的指针域。 链串中的一个存储结点可以存储1个或多个字符,通常将链串中每个存储结点所存储的字符个数称为结点大小。 串值的存储密度=串值所占的存储位/实际分配的存储位    存储密度小,运算处理方便,如结点大小为1时,各种操作同单链表,但存储空间占用量大;存储密度大时,运算处理不方便。 4.5 串操作应用 一、文本编辑 文本编辑程序是一个面向用户的系统服务程序,以用于源程序的输入和修改,也可用于报刊和书籍的编辑排版以及办公室的公文书信的起草和润色。可用于文本编辑的程序很多,功能强弱差别很大,但基本操作是一致的:都包括串的查找,插入和删除等基本操作。 对用户来讲,一个文本(文件)可以包括若干页,每页包括若干行,每行包括若干文字。对文本编辑程序来讲,可把整个文本看成一个长字符串,称文本串,页是文本串的子串,行又是页的子串。为简化程序复杂程度,可简单地把文本分成若干行。 例:下面的一段源程序可以看成一个文本串, main(){ float a,b,max; scanf(%f,%f,a,b); if (ab) max=a; else max=b; };  此算法可将O(m*n)的时间复杂度改进为O(m+n)。  在前一节的搜索算法中没有充分利用模式t和已匹配部分的信息,在每一趟匹配失败时,总是从模式串的第一个字符开始匹配。  改进的方法是:每当一趟匹配过程中出现字符比较不相等时,不回溯i指针,而是利用模式t和已经得到的“部分匹配”的结果,将模式串向右“滑动”一段距离后继续比较。 需要解决的问题: 模式串t向右“滑动”多少呢? 2 KMP算法 j=1 a * i=9 a b a a b a a c c a b a a b c a b c 第九趟匹配 j=1 a * i=10→ 17 a b a a b a a c c a b a a b c a b

文档评论(0)

3471161553 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档