回 帖 发 新 帖 刷新版面

主题:实现字符串置换操作

//****以下是实现字符串置换操作****************
#include <stdio.h>
#include <string.h>
#include<malloc.h>
int index(char *s, char *t,int pos, int sl,int tl);//从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的pos开始之后首次出现的位置
void replace(char *s,char *t,char *v);//串的置换,将主串s中的t串,置换为v串
main()
{
  char *s,*t,*v;
  s=(char *)malloc(100);
  t=(char *)malloc(100);
  v=(char *)malloc(100);
  printf("输入字符串s:");
  gets(s); 
  printf("输入要在字符串s查找的子串t:");
  gets(t);
  printf("输入要置换的字符串v:");
  gets(v);
  replace(s,t,v); //调用串置换函数 
  printf("输出替换后的新字符串:%s\n",s);
}
void replace(char *s,char *t,char *v)//串的置换,将主串s中的t串,置换为v串
{
   int i,j,k=1,po,sl,tl,p;
   sl=strlen(s);  
   tl=strlen(t);
   po=1;
   k=index(s,t,po,sl,tl);
   if(k==0)
       return;
   i=k-1;
    if(strlen(v)==tl)//替换串的长度和子串的长度相等时
      for(j=0;j<=tl-1;j++)
         s[i++]=v[j];

   if(strlen(v)!=tl)//替换串的长度和子串的长度不相等时,借助第三个数组t完成操作
    {
      for(j=0;j<k-1;j++)//先复制子串前的字符
          t[j]=s[j];
      for(p=0;p<strlen(v);p++)//再复制换的字符
          t[j++]=v[p];
      for(p=k+tl-1;p<sl;p++)//接着复制子串后的字符
          t[j++]=s[p];
      t[j]='\0';
      sl=strlen(t);
      for(i=0;i<sl;i++)//最后把数组t的值赋值给s
          s[i]=t[i];
      s[i]='\0';
    }     
}
int index(char *s, char *t,int pos,int sl,int tl)//从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的pos开始之后首次出现的位置
{
    int i,j;
    i=pos;  
    j=1; 
    while(i<=sl && j<=tl)
    if(s[i-1]==t[j-1])  
        {
          i++; 
          j++; 
        }
    else 
        { i=i-j+2; 
          j=1;
        }
    if(j>tl) 
        return(i-tl);//返回位置
    else 
        return(0);

}

//****以上是实现字符串置换操作****************
[em7][em7][em7][em7][em7][em7][em7][em7][em20][em20][em20][em20][em20][em20][em20]

回复列表 (共2个回复)

沙发

如果主串中有m(m>1)个子串呢。。。你只是默认的主串中只有一个子串

板凳

还有就是在判断出置换串和子串的长度不相等的时候不需要利用另外的数组
直接的在字符串里面移动应该更好

我来回复

您尚未登录,请登录后再回复。点此登录或注册