- 1、本文档共63页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构-串和数组
3.6 其他线性结构;串(String)是由零个或多个字符组成的有限序列。一般记为: S=a1 a2 ... an (n≥0)
其中,S是串的名,用单引号括起来的字符序列是串的值;ai(1≤i≤n)可以是字母、数字或其它字符,串中字符的数目n称为串的长度。
n=0的串称为空串(null string)。;串中任意个连续的字符组成的子序列称为该串的子串。
包含子串的串相应地称为主串。
通常称字符在序列中的序号为该字符在串中的位置。
子串在主串中的位置则以子串的第一个字符在主串中的位置来表示。
当两个串的长度相等,并且各个对应位置上的字符都相等时,称两个串相等。;例:串名为A、B、C、D的四个串如下:
A=very good; 长度为9,是D的主串;
B= ; 长度为3;
C=; 长度为0(空串);
D=good; 长度为4,是A的子串。
D在A中的位置是6。;;(3) 删除操作:StrDelete(S,pos,len)
初始条件:字符串S存在,
1≤pos ≤StrLength(S)-len+1;
操作结果:从字符串S中删除第pos个字符起长度为len的子串。
(4) 复制操作:StrCopy(S,T)
初始条件:字符串S存在;
操作结果:将字符串S的内容复制到串T。;(5) 判空操作:StrEmpty(S)
初始条件:字符串S存在;
操作结果:若S为空串,则返回TRUE,否则返回FALSE。
(6) 比较操作:StrCompare(S,T)
初始条件:字符串S、T存在;
操作结果:若ST,则返回值0;若S=T,则返回值=0;若ST,则返回值0 。;(7) 求串长操作:StrLength(S)
初始条件:字符串S存在;
操作结果:返回字符串S的长度,即串S中字符的个数。
(8) 置空操作:StrClear(S)
初始条件:字符串S存在;
操作结果:将字符串S清为空串。;(9) 联接操作:StrCat(S,T)
初始条件:字符串S、T存在;
操作结果:将字符串T的值连接在S的后面。
(10) 求子串操作:SubString(Sub,S,pos,len)
初始条件:字符串S存在,
1≤pos≤StrLength(S)
且1≤len≤StrLength(S)-pos+1;
操作结果:用Sub返回字符串S的第pos个字符开始长度为len的子串。;(11) 定位操作:StrIndex(S,pos,T)
初始条件:字符串S、T存在,T非空,
1≤pos≤StrLength(S);
操作结果:若字符串S中存在与T相等的子串,则返回它在字符串S中第pos个字符之后第一次出现的位置;否则返回0。
(7) 置换操作:StrReplace(S,T,V)
初始条件:字符串S、T、V存在,T非空;
操作结果:用V替换字符串S中出现的所有与T相等的不重叠的子串。;(13) 释放操作:StrDestroy(S)
初始条件:字符串S存在;
操作结果:销毁字符串S。;串的两种基本存储结构:顺序存储结构和链式存储结构。
定长顺序串:当串的长度基本固定时,主要考虑采用顺序存储结构实现。其C语言描述如下:
#define Maxlen 20 //串的最大长度
typedef struct { //串的定义
char ch[Maxlen];
int len; //串的长度
} Sstring;;在进行串的插入时:
插入位置pos将原字符串划分为两部分(分别假设为A和B,长度分别为LA和LB);
待插入字符串假设为C,其长度为LC;
插入过程可能出现下列三种情况:
1) 插入后串的总长度为LA+LB+LC ≤Maxlen;
2) 插入后串的总长度Maxlen,且pos+LC Maxlen;
3) 插入后串的总长度Maxlen,且pos+LCMaxlen;;/* 在串s中序号为pos的字符之前插入串t */
int StrInsert(SString *s, int pos, SString t)
{ int i;
if(pos0||poss-len) return(0); /* 插入位置不合法 */
if(s-len+t.len=Maxlen) { /* 插入后串长≤Maxlen */
for(i=s-len+t.len-1; i=t.len+pos; i--)
s-ch[i]=s-ch[i-t.len];
for(i=0; it.len; i++) s-c
文档评论(0)