📄 4.17.c
字号:
4.17③ 编写算法,实现串的基本操作Replace(&S,T,V)。
要求采用教科书4.2.1节中所定义的定长顺序存储表示,
但不允许调用串的基本操作。
要求实现以下函数:
Status Replace(SString& s, SString t, SString v);
/* 用串v替换串s中所有和串t匹配的子串。 */
/* 若有与t匹配的子串被替换,则返回TRUE;*/
/* 否则返回FALSE */
定长顺序串SString的类型定义:
typedef unsigned char SString[MAXSTRLEN+1];
/* s[0] is the string's length */
Status Replace(SString& s, SString t, SString v)
/* 用串v替换串s中所有和串t匹配的子串。 */
/* 若有与t匹配的子串被替换,则返回TRUE;*/
/* 否则返回FALSE */
{
int n,i,j,k,m,exist=0;
for(i=1;i<=s[0]-t[0]+1;i++)
{
for(j=1;s[i+j-1]==t[j]&&j<=t[0];j++);
if(j>t[0]) //找到模式串
{
exist=1;
if(t[0]==v[0])
{for(k=i,m=1;m<=v[0];k++,m++) s[k]=v[m];}
else if(t[0]>v[0])
{
for(k=i,m=1;m<=v[0];k++,m++) s[k]=v[m];
for(k=i+v[0];k<=s[0]-t[0]+v[0];k++) s[k]=s[k-v[0]+t[0]];
}
else
{
for(k=s[0]-t[0]+v[0],m=s[0];k>=v[0]+i;k--,m--) s[k]=s[m];
for(k=v[0]+i-1,m=v[0];m>=1;k--,m--) s[k]=v[m];
}
s[0]+=v[0]-t[0];
i=i+v[0]-1;
}
}
if(exist==1) return TRUE;
else return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -