- 1、本文档共36页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
;E=(注意区分空串与空格串区别)
T=“ABBABBCA”t=“ABBABBCA”(T和t不等)
P=“BBC”(P是T的子串,在T的位置是5)
子串:串中任意个连续的字符组成的子序列。
主串:包含子串的串相应地称为主串。
特别地,空串是任意串的子串。任意串s都是s本身的子串。
除s本身之外,s的其它子串称为s的真子串。
位置:字符在序列中的序号。子串在主串中的位置那么以子串的第一个字符在主串中的位置来表示。
相等:两个串的长度相等,并且对应位置的字符都相等。; ;3.2字符串的实现;1顺序表示;字符串运算1:创立空顺序串
创立空串的方法与创立空顺序表类似。
PSeqStringcreateNullStr_seq(intm)
程序;字符串运算2:求顺序表示的串的子串
PSeqStringsubStr_seq(PSeqStrings,inti,intj)
求从s所指的顺序串中第i(i0)个字符开始连续取j个字符所构成的子串。如:subStr_seq(s,5,3)程序实现;PSeqStringsubStr_seq(PSeqStrings,inti,intj)
{ PSeqString s1;
int k;
s1=createNullStr_seq(); /*创立一空串*/
if(s1==NULL)returnNULL;
if(i0i=s-nj0)
{ /*假设从i开始取不了j个字符,那么能取几个就取几个*/
if(s-ni+j-1)j=s-n-i+1;
for(k=0;kj;k++)
s1-c[k]=s-c[i+k-1];
s1-n=j;
}
return(s1);
};2链接表示;例如:串s=abcdef,按单链表存储时,假设s是LinkString类型的变量,那么它的存储结构如图3.2(a)所示。同样为了方便处理,可在第一个结点之前增加一个头结点,如图3.2(b)所示。也可以采用循环表的形式存储串,具体形式请看图3.2(c)。
;;字符串运算1:创立带头结点的空链串
创立空串的方法与创立空链表类似,
可有如下程序实现:
LinkStringcreateNullStr_link(void);字符串运算2:求单链表示的串的子串
LinkStringsubStr_link(LinkStrings,inti,intj)
求从s所指的带头结点的链串中第i(i0)个字符
开始连续取j个字符所构成的子串。
这里首先要为链串结构和头结点申请空间,创立一个
空链表,这由算??3.3实现。然后判断所给参数i,j的值是
否合理,i,j的取值应为i0,j0。接着从s-head开始找第
i个结点,找到后,就从该结点开始,为子串中的结点申请
空间,并将元素值拷过去。
程序实现;LinkStringcreateNullStr_link()
{LinkStringpst;
pst=(LinkString)malloc(sizeof(structStrNode));
if(pst!=NULL)
pst-link=NULL;
return(pst);
}
;PLinkStringsubStr_link(PLinkStrings,inti,intj)
/*求从s所指的链串中第i(i0)个字符开始
连续j个字符所构成的子串*/
{ PLinkStrings1;
PStrNodep,q,t;
intk;
s1=createNullStr_link();/*创立空链串*/
if(s1==NULL)
{ printf(Outofspace!\n);
returnNULL;
}
if(i1||j1)return(s1); /*i,j值不适宜,
返回空串*/
p=s-head;
for(k=1;ki;k++)/*找开始字符*/
if(p!=NULL)
p=p-link;; else
return(s1);
i
文档评论(0)