- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 字串 习题参考答案
第4章 串 习题参考答案
一、基础知识题
4.1 简述下列每对术语的区别:
空串和空格串; 串常量与串变量;主串和子串;串变量的名字和串变量的值;静态分配的顺序串与动态分配的顺序串。
【解答】 不含任何字符的串称为空串,其长度为0。仅含有空格字符的串称为空格串,其长度为串中空格字符的个数。空格符可用来分割一般的字符,便于人们识别和阅读,但计算串长时应包括这些空格符。空串在串处理中可作为任意串的子串。
用引号(数据结构教学中通常用单引号,而C语言中用双引号)括起来的字符序列称为串常量,串值可以变化的量称为串变量。
串中任意个连续的字符组成的子序列被称为该串的子串。包含子串的串又被称为该子串的主串。子串在主串中第一次出现的第一个字符的位置称子串在主串中的位置。
串变量的与其它变量一样,要用名字引用其值,串变量的名字也是标识符,串变量的值可以修改。
串的存储也有静态存储和动态存储两种。静态存储指用一维数组,通常一个字符占用一个字节,需要静态定义串的长度,具有顺序存储结构的优缺点。若需要在程序执行过程中,动态地改变串的长度,则可以利用标准函数malloc()和free()动态地分配或释放存储单元,提高存储资源的利用率。在C语言中,动态分配和回收的存储单元都来自于一个被称之为“堆”的自由存储区,故该方法可称为堆分配存储。类型定义如下所示:
typedef struct
{ char *str;
int length;
}HString;
4.2设有串S=’good’,T=’I︼am︼a︼student’,R=’!’,求:
(1)StringConcat(T,R) (2)SubString(T,8,7)
(3)StringLength(T) (4)Index(T, ’a’)
(5)StringInsert(T,8,S)
(6)Replace(T, SubString(T,8,7), ’teacher’)
【解答】
(1) StringConcat(T,R)=’I︼am︼a︼student!’
(2) SubString(T,8,7)=’student’
(3) StringLength(T)=14
(4) Index(T, ’a’)=3
(5) StringInsert(T,8,S)=’I︼am︼a︼goodstudent’
(6) Replace(T, SubString(T,8,7),’teacher’)= ’I︼am︼a︼teacher’
4.3若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,执行
concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2)))
操作的结果是什么?
【解答】
concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2)))
= concat(replace(S1,substr(S1,4,3),S3),substr(S4,2,4))
= concat(replace(S1,’DEF’,S3),’1234’)
= concat(‘ABC###G’,’1234’)
= ‘ABC###G1234’
4.4 设S为一个长度为n的字符串,其中的字符各不相同,则S中的互异的非平凡子串(非空且不同于S本身)的个数是多少?
【解答】长度为n的字符串中互异的非平凡子串(非空且不同于S本身)的个数计算如下:
长度为1的子串有n个,长度为2的子串有n-1个,长度为3的子串有n-2个,……,长度为n-1的子串有2个,长度为n的子串有1个(按题意要求这个子串就是S本身,不能计算在总数内)。故子串个数为:(2+n)*(n-1)/2
4.5 KMP算法(字符串匹配算法)较Brute(朴素的字符串匹配)算法有哪些改进?
【解答】KMP算法的最大特点是主串指针不回溯,在整个匹配过程中,对主串从头到尾扫描一遍,对于处理存储在外存上的大文件是非常有效的。
虽然Brute(朴素的字符串匹配)算法的时间复杂度是O(n*m),但在一般情况下,其实际的执行时间近似于O(n+m),因此至今仍被采用。KMP算法仅当主串与模式间存在许多“部分匹配”的情况下才显得比Brute(朴素的字符串匹配)算法快得多。
4.6 求串’ababaaababaa’ 的next函数值。
解答: a b a b a a a b a b a
next[j]: 0 1 1 2 3 4 2 2 3 456
4.7 模式串t=’a
文档评论(0)