输入三个字符串,将字符串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; }