1、第 04 章 作业答案习 题习 题 (p.119)1. 设s=I AM A STUDENT, 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个字符后面的所有字符可能需要左移
2、或右移。11. 写算法,实现顺序串的基本操作StrReplace(&s, t, v)。1. 设s=I AM A STUDENT, 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= I AM A_; sub2= _; StrIndex(s,A
3、,4)=6; StrReplace(s,STUDENT,q)= I AM A WORKER; StrCat(StrCat(sub1,t), StrCat(sub2,q)= I AM A GOOD WORKER;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; k len; k+
4、) s1-ch k d = s1-ch k ; / 如果len s2.len,右移扩位/ 暂不考虑截断else if ( len len 1; k = j + 1; k- ) s1-ch k + d = s1-ch k ; / 复制替换串for ( k = 0; k ch i + k = v.ch k ;s1-len = s1-len len + s2.len ;11. 写算法,实现顺序串的基本操作StrReplace(s, t, v)。提示: 算法思路:(1) 被替换子串定位(2) 被替换子串后面的字符左移或右移(为替换子串准备房间)(3) 替换子串入住(复制)(4) 重复上述,直到 实现策
5、略:可以先采用调用子函数的方法:(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);p
6、os = k + v.len ;V3:完成多次代换(循环条件1)StrReplace(s, t, v) pos=0; while( pos len ) k= StrIndex(s, pos, t);if(k=0) Replace(s, k , t.len , v);pos = k + v.len ; else break;V4:完成多次代换(循环条件2)StrReplace(s, t, v) pos=0; while( pos len t.len ) k= StrIndex(s, pos, t);if(k=0) Replace(s, k , t.len , v);pos = k + v.len
7、 ; else break;V5:返回完成情况状态码int StrReplace(s, t, v) int flag=0; pos=0; while( pos len t.len ) k= StrIndex(s, pos, t);if(k=0) Replace(s, k , t.len , v);pos = k + v.len ;flag=1; else break; return flag; 消去子函数调用的过程如下:V4:完成多次代换(循环条件2)StrReplace(s, t, v) pos=0; while( pos len t.len ) k= StrIndex(s, pos, t)
8、;if(k=0) Replace(s, k , t.len , v);pos = k + v.len ; else break;V4:完成多次代换(循环条件2)StrReplace(s, t, v)if (t.len=0) return(0); / 代换失败 start=0; while( start len t.len )/ k= StrIndex(s, start, t);i = start; j = 0;while (j ch i = t.ch j ) i+; j+; else if ( start = s-len t.len ) start = -1; break; + start;
9、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; i len; i+ ) s-ch i d = s-ch i ; / 如果t.len v.len,右移扩位/ 暂不考虑截断else if ( t.len len 1; i = start + t.len; i- ) s-ch i + d = s-ch i ; / 复制替换串for ( i = 0; i ch start + i = v.ch i ;s-len = s-len t.len + v.len ;start = start + v.len ; else break;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1