第 04 章作业答案.docx

上传人:b****5 文档编号:29044818 上传时间:2023-07-20 格式:DOCX 页数:8 大小:15.51KB
下载 相关 举报
第 04 章作业答案.docx_第1页
第1页 / 共8页
第 04 章作业答案.docx_第2页
第2页 / 共8页
第 04 章作业答案.docx_第3页
第3页 / 共8页
第 04 章作业答案.docx_第4页
第4页 / 共8页
第 04 章作业答案.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

第 04 章作业答案.docx

《第 04 章作业答案.docx》由会员分享,可在线阅读,更多相关《第 04 章作业答案.docx(8页珍藏版)》请在冰豆网上搜索。

第 04 章作业答案.docx

第04章作业答案

习题

习题(p.119)

1.设s=’IAMASTUDENT’,t=’GOOD’,q=’WORKER’。

给出下列操作的结果:

StrLength(s);SubString(sub1,s,0,7);SubString(sub2,s,6,1);

StrIndex(s,4,’A’);StrReplace(s,’STUDENT’,q);

StrCat(StrCat(sub1,t),StrCat(sub2,q))。

 

9.写一个函数将顺序串s1中的第i个字符到第j个字符之间的字符用s2串替换。

[提示]:

包括第i个字符和第j个字符,第j个字符后面的所有字符可能需要左移或右移。

 

11.写算法,实现顺序串的基本操作StrReplace(&s,t,v)。

1.设s=’IAMASTUDENT’,t=’GOOD’,q=’WORKER’。

给出下列操作的结果:

StrLength(s);SubString(sub1,s,0,7);SubString(sub2,s,6,1);

StrIndex(s,4,’A’);StrReplace(s,’STUDENT’,q);

StrCat(StrCat(sub1,t),StrCat(sub2,q))。

[参考答案]

StrLength(s)=14;sub1=’IAMA_’;

sub2=’_’;StrIndex(s,’A’,4)=6;

StrReplace(s,’STUDENT’,q)=’IAMAWORKER’;

StrCat(StrCat(sub1,t),StrCat(sub2,q))

=’IAMAGOODWORKER’;

 

9.写一个函数将顺序串s1中的第i个字符到第j个字符之间的字符用s2串替换。

[提示]:

包括第i个字符和第j个字符,第j个字符后面的所有字符可能需要左移或右移。

 

Replace(s1,i,j,s2)

len=j-i+1;

//如果len>s2.len,左移缩位

if(len>s2.len)

{d=len–s2.len;

for(k=j+1;klen;k++)

s1->ch[k–d]=s1->ch[k];

}

//如果len

//暂不考虑截断

elseif(len

{d=s2.len–len;

for(k=s1->len–1;k>=j+1;k--)

s1->ch[k+d]=s1->ch[k];

}

//复制替换串

for(k=0;k

s1->ch[i+k]=v.ch[k];

s1->len=s1->len–len+s2.len;

 

11.写算法,实现顺序串的基本操作StrReplace(s,t,v)。

[提示]:

●算法思路:

(1)被替换子串定位

(2)被替换子串后面的字符左移或右移(为替换子串准备房间)

(3)替换子串入住(复制)

(4)重复上述,直到……

●实现策略:

可以先采用调用子函数的方法:

(1)利用StrIndex(s,pos,t)找到被替换串的位置pos,

(2)利用Replace(s,pos,len,v),实现一次替换

(3)在此基础上,消去子函数调用即可

 

●采用调用子函数的方法如下:

V1:

仅完成一次代换

StrReplace(s,t,v)

{

k=StrIndex(s,0,t);

Replace(s,k,t.len,v);

}

V2:

完成多次代换(无条件)

StrReplace(s,t,v)

{

pos=0;

重复下面操作:

{

k=StrIndex(s,pos,t);

Replace(s,k,t.len,v);

pos=k+v.len;

}

}

V3:

完成多次代换(循环条件1)

StrReplace(s,t,v)

{

pos=0;

while(pos<=s->len)

{

k=StrIndex(s,pos,t);

if(k>=0)

{

Replace(s,k,t.len,v);

pos=k+v.len;

}

elsebreak;

}

}

 

V4:

完成多次代换(循环条件2)

StrReplace(s,t,v)

{

pos=0;

while(pos<=s->len–t.len)

{

k=StrIndex(s,pos,t);

if(k>=0)

{

Replace(s,k,t.len,v);

pos=k+v.len;

}

elsebreak;

}

}

 

V5:

返回完成情况状态码

intStrReplace(s,t,v)

{intflag=0;

pos=0;

while(pos<=s->len–t.len)

{

k=StrIndex(s,pos,t);

if(k>=0)

{

Replace(s,k,t.len,v);

pos=k+v.len;

flag=1;

}

elsebreak;

}

returnflag;

}

 

●消去子函数调用的过程如下:

V4:

完成多次代换(循环条件2)

StrReplace(s,t,v)

{

pos=0;

while(pos<=s->len–t.len)

{

k=StrIndex(s,pos,t);

if(k>=0)

{

Replace(s,k,t.len,v);

pos=k+v.len;

}

elsebreak;

}

}

 

V4':

完成多次代换(循环条件2)

StrReplace(s,t,v)

{

if(t.len==0)return(0);//代换失败

start=0;

while(start<=s->len–t.len)

{

//k=StrIndex(s,start,t);

i=start;j=0;

while(j

if(s->ch[i]==t.ch[j]){i++;j++;}

else{if(start==s->len–t.len)

{start=-1;break;}

++start;

i=start;

j=0;

}

 

if(start>=0)

{

//Replace(s,start,t.len,v);

//如果t.len>v.len,左移缩位

if(t.len>v.len)

{d=t.len–v.len;

for(i=start+t.len;ilen;i++)

s->ch[i–d]=s->ch[i];

}

//如果t.len

//暂不考虑截断

elseif(t.len

{d=v.len–t.len;

for(i=s->len–1;i>=start+t.len;i--)

s->ch[i+d]=s->ch[i];

}

//复制替换串

for(i=0;i

s->ch[start+i]=v.ch[i];

s->len=s->len–t.len+v.len;

start=start+v.len;

}

elsebreak;

}

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 成人教育 > 专升本

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1