- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章节串-1
第四章 串;4.1 串类型的定义;注意:空串和空白串的不同,例如‘ ’和‘’分别表示长度为1的空白串和长度为0的空串。
子串(substring):串中任意个连续字符组成的子序列称为该串的子串,包含子串的串相应地称为主串。
子串的序号:将子串在主串中首次出现时的该子串的首字符对应在主串中的序号,称为子串在主串中的序号(或位置)。
;
例如,假设a、b、c、d为如下的4个串:
a= BEI , b=JING
c=‘BEIJING’ , d=‘BEI JING’
则它们的长度分别为3、4、7和8;并且a和b都是c和d的子串,a在c和d中的位置都是1,而b在c中的位置是4,在d中的位置则是5。
; 特别地,空串是任意串的子串,任意串是其自身的子串。
串相等:如果两个串的串值相等(相同),称这两个串相等。换言之,只有当两个串的长度相等,且各个对应位置的字符都相同时才相等。
通常在程序中使用的串可分为两种:串变量和串常量。
串常量和整常数、实常数一样,在程序中只能被引用但不能不能改变其值,即只能读不能写。
串变量和其它类型的变量一样,其值是可以改变。;4.1.2 串的抽象数据类型定义 ;;串赋值StrAssign、串比较StrCompare、求串长StrLength、串联接Concat以及求子串SubString这5种操作是串的最小操作子集,这些操作不可能利用其他串操作实现,其他操作可以通过这5种基本操作实现。
例如:定位函数Index可以通过 这5种操作实现;Int Index(String S, String T, int pos){
if(pos0){
n=StrLength(S); m=StrLength(T); i=pos;
while(i=n-m+1){
SubString(sub,S,I,m);
if(StrCompare(sub,T)!=0 ++i;
else return i;
}
}
};4.2 串的存储表示和实现;C语言补充:
char c1;
单个字符
char *c2;
指向字符的指针
c1=‘a’;
c2=“abcd”
;
char c3[10];
char c4[]=“abcd”;
c3 = “abcd”?
c4[1] = ‘f’?
;
char c5[5]=“abcd”;
char *c6=“abcd”;
c5[1]=‘f’;
c5[2]=c6[0];
;4.2.1 串的定长顺序存储表示;;
求串长度
int StrLength(SString S){
/* 返回串的元素个数 */
return S[0];
};串的赋值
Status StrAssign(SString T,unsigned char *chars){
/* 生成一个其值等于chars的串T */
int i;
if(strlen(chars)MAXSTRLEN)
return ERROR;
else{
T[0]=strlen(chars);
for(i=1;i=T[0];i++)
T[i]=*(chars+i-1);
return OK;
}
};串的连接操作(未被截断)
S1
S2
T;未被截断;if(S1[0]+S2[0]=MAXSTRLEN){
/* 未截断 */
for(i=1;i=S1[0];i++)
T[i]=S1[i];
for(i=1;i=S2[0];i++)
T[S1[0]+i]=S2[i];
T[0]=S1[0]+S2[0];
return TRUE;
};串的连接操作(被截断)
S1
S2
T;S2被截断;
else if(S1[0]MAXSTRLEN){
/* 截断S2 */
for(i=1;i=S1[0];i++)
T[i]=S1[i];
for(i=1;i=MAXSTRLEN-S1[0];i++)
T[S1[0]+i]=S2[i];
T[0]=MAXSTRLEN;
return FALSE;
}
};S2被全部截去;else{
//S2被全部截去
for(i=1;i=S1[0];i++)
T[i]=S1[i];
T[0]=MAXSTRLEN;
};程序如下
Status Concat(SString T,SString S1,SString S2){
/* 用T返回S1和S2联接而成的新串。若未截断,
则返回TRUE,否则FALSE */
int i;
if
文档评论(0)