【正确答案】本题比较简单,有多种处理方法:
思路1:先给替换串腾出足够的位置,比如从i到j有n个字符,s2的长度为m,如果m<n,则下标j+1往后的字串向前移动n-m个位置;如果m>n,则下标j+1往后的字串向后移动m-n个位置;如果m等于n,则无需移动。然后将s2串复制到腾出的位置上。
思路2:先提取s1中位置i之前的所有字符构成的子串str1,再提取位置i+j-1及之后的所有字符构成的子串str2,最后将str1、s2、str2连接起来便构成了结果串。
本题代码如下(仅提供“思路2”的实现):
Str replace(Str *s1,int i,int j,Str *s2)
{
Str s;
int n,k;
if(i+j-1<=s1->length)
{
for(n=0;n<i-1;++n) //把s1的前i-1个字符赋给s
s.ch[n]=s1->ch[n];
for(n=0;n<s2->length;++n) //连接s2串
s.ch[i+n-1]=s2->ch[n];
s.length=i+s2->length-1;
for(n=s.length,k=i+j-1;k<s1->length;++n,++k)
//连接s1的位置i及之后的字符
s.ch[n]=s1->ch[k];
s.length=n;
s.ch[s.length]='/0';
}
else
{
s.ch[0]='/0';
s.length=0;
}
return s;
}
【答案解析】