将字符串s1中任何与字符串s2匹配的字符都删去,存放于一个新的字符串s3中

 

//编写函数squeeze(s1,s2),将字符串s1中任何与字符串s2匹配的字符都删去

#include <stdio.h>
#include <string.h>

char *squeeze(char*s1,char*s2);
char s1[];
char s2[];
char *s3;

int main()
{
 int n=0;
 s1="zhangchaozhang";
 s2="chao";
 printf("s1:%s\n",s1);printf("s2:%s\n",s2);
 s3=squeeze(s1,s2);
 printf("delete characters in s1 that matches s2 get s3:\n%s",s3);
}

char *squeeze(char*s1,char*s2)
{
 int i,j,len1,len2;
 int compare=1;//默认为1
 int k=0;
 char s3[100];
 len1=strlen(s1);len2=strlen(s2);
 for(i=0,k=0;i<len1;i++,k++)
 {
  if(s1[i]==s2[0])//s1遇到与s2第一个字符相等的字符,进入判断
  {
   for(j=i+1;(j<i+len2)&&(j<len1);j++)
   {
    if(s1[j]==s2[j-i])
     compare=0;
    else
    {
     compare=1;//有不相等的字符
     break;
    }
   }
  }
  if(!compare)//s1中有和s2匹配的字符串
  {
   s3[k]=s1[i+len2];
  }
  else
   s3[k]=s1[i];
 }
 s3[k]='\0';
 return s3;
}

可以使用C语言字符串处理函数strstr()和strncpy()来实现字符串替换操作。具体步骤如下: 1. 定义三个字符串S1S2S3,分别表示原字符串、被替换的字符串和替换后的字符串。 2. 使用strstr()函数在S1查找S2字符串,如果找到了则返回S2字符串S1的首个字符的地址。 3. 如果找到了S2字符串,则使用strncpy()函数将S3字符串复制到S1S2字符串的位置上,并将S2字符串后面的字符串向后移动。 4. 重复步骤2和步骤3,直到S1不再存在S2字符串为止。 5. 最后得到的S1字符串就是替换后的字符串。 下面是一段C语言代码示例,用于将字符串S1所有字符串S2替换为字符串S3: ``` #include <stdio.h> #include <string.h> void replace(char *s1, const char *s2, const char *s3) { char *p = NULL; int len1 = strlen(s1); int len2 = strlen(s2); int len3 = strlen(s3); int len4 = len1 + (len3 - len2) * len1 / len2; char *tmp = (char*)malloc(len4 + 1); memset(tmp, 0, len4 + 1); p = strstr(s1, s2); while(p != NULL) { strncpy(tmp + strlen(tmp), s1, p - s1); strcat(tmp, s3); s1 = p + len2; p = strstr(s1, s2); } strcat(tmp, s1); strcpy(s1, tmp); free(tmp); } int main() { char s1[] = "Hello, World! This is a test string."; char s2[] = "test"; char s3[] = "example"; printf("Before replace: %s\n", s1); replace(s1, s2, s3); printf("After replace: %s\n", s1); return 0; } ``` 输出结果为: ``` Before replace: Hello, World! This is a test string. After replace: Hello, World! This is a example string. ``` 注:上述代码使用了动态内存分配函数malloc()和free(),需要在使用完内存后记得释放。为了防止替换后字符串超过原字符串长度的情况,根据替换后字符串长度估算了最终字符串长度,并在堆上分配了足够的内存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值