⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4.17.c

📁 部分高校使用anyview编程测试数据结构习题,此代码为数据结构题集(c语言版)严蔚敏版的课后习题答案.专门提供给在anyview上运行,全部为通告代码
💻 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 + -