输入三个字符串,将字符串1中里的字符串2用字符串3代替

题目:编写程序输入三个字符串,写一函数实现:输入三个字符串,将字符串1中里的字符串2用字符串3代替。

例如:
串1:“abcdefgh123456xy123xyxy”
串2:“1234”
串3:“ABCDE”
处理完后串1变为:"abcdefghABCDE56xy123xyxy"

思路:1.找出串1与串2重叠的位置(从头开始找,找到串1中与串2一一对应的片段,然后定位)
    2.定好重复的位置后,利用函数将串1在与串2重复的位置分成两段(例如上题两段分别是“abcdefgh”和“56xy123xyxy”)

好了,思路有了就上源代码吧:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define maxn 105


int main(int argc, char* argv[])
{
    char a[maxn],b[maxn],c[maxn],buf[maxn]={0};
scanf("%s%s%s",a,b,c);
int len2=strlen(b);
int len1=strlen(a);
int first=stringfind(a,b);
if(first!=0)
    {
        strcut(a,buf,len1,first,len2);
        strcat(a,c);
        strcat(a,buf);
        printf("%s\n",a);
    }
return 0;
}


void strcut(char* p,char* buf,int len1,int first,int len2)          //strcut函数用来实现思路2
{
    int j=0;
    int i=first+len2;                                                //这里的i的值是切开后第二个片段的第一个字符的位置
while((i+j)<len1) (PS:可以多尝试,用debug发现规律)
    {
        buf[j]=p[i+j];
        j++;
    }
p[first]='\0';
}


int stringfind(char *m,char *n)                               //stringfind函数用来实现思路1
{
    int i,j;
    for(i=0;m[i]!='\0';i++)
    {
        if(m[i]!=n[0]) continue;                                    //先判断串1中与串2第一个字符'1'相同的位置
        j=0;
        while(n[j]!='\0'&&m[i+j]!='\0') //再逐个判断串1中的‘1’后面字符是否与串2的一一对应
        {
            j++;
            if(m[i+j]!=n[j])break;
        }
        if(n[j]=='\0')return i;
    }
    return 0;
}
  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值