急fun函数的功能如何去实现字符串替换的啊求详解

急急急急,fun函数的功能怎么去实现字符串替换的啊?求详解。
#include <stdio.h>
#include <string.h>
void fun (char *s, char *t1, char *t2 , char *w)
{
  char *p , *r, *a;
  strcpy(w, s);
  while (*w)
  {p = w; r = t1;
/************found************/
  while (*r)
  if (*r == *p) {r++; p++;}
  else break;
  if (*r == '\0')
  {a = w; r = t2;
  while (*r){
/************found************/
  *a = *r; a++; r++;
  }
  w += strlen(t2);
  }
  else w++;
  }
}
main()
{
  char s[100], t1[100], t2[100], w[100];
  printf("\nPlease enter string S:"); scanf("%s", s);
  printf("\nPlease enter substring t1:"); scanf("%s", t1);
  printf("\nPlease enter substring t2:"); scanf("%s", t2);
  if (strlen(t1)==strlen(t2)) {
  fun(s, t1, t2, w);
  printf("\nThe result is : %s\n", w);
  }
  else printf("Error : strlen(t1) != strlen(t2)\n");
}
求解fun函数部分思路字符串替换思路?最后每句诠释。

------解决方案--------------------
while (*r)if (*r == *p) {r++; p++;}else break;//这个while是找w中第一个与t1匹配的字串
if (*r == '\0')//这个判断条件成立的话,说明找到字串
{a = w; r = t2;
while (*r){*a = *r; a++; r++;}//如果找到字串,用t2替换
w += strlen(t2);//w前进到找到字串的最后一个位置
else w++;//如果没有找到,前进一个字符
------解决方案--------------------
楼主你代码给你整理下吧:
C/C++ code

void fun (char *s, char *t1, char *t2 , char *w)
{
    char *p , *r, *a;
    strcpy(w, s);
    while (*w)
    {
        p = w; 
        r = t1;
        while (*r)
        {
            if (*r == *p) 
            {
                r++; 
                p++;
            }
            else 
                break;
        }
        if (*r == '\0')
        {
            a = w; 
            r = t2;
            while (*r)
            {
                *a = *r; 
                a++; 
                r++;
            }
            w += strlen(t2);
        }
        else 
            w++;
    }
}

------解决方案--------------------
LZ,字符串替换一般是实用其他一些功能函数实现的,除非特殊情况,没必要手工实现

int index(string sub) // 定位子串
int strlen(string s) // 取字符串长
void strdel(string s,int begin,int end) // 删除指定区间字符
void strinsert(int pos,string s1,string s2) // 再某位置插入字符串

void fun(string s1,string s2,string s3)
{
int p = index(s2);
strdel(s1,p,p+strlen(s2));
strinsert(p,s1,s3);
}
------解决方案--------------------
当s所指字符产中的内容为abcdabfab,t1所指子串中的内容为ab,t2所指子串中的内容为99时,结果:
就按照这个给你讲一下
首先char *s= "abcdabfab";char *t1= "ab";char *t2= "99";w是空的
1.刚进入函数,strcpy的作用是拷贝,令w = "abcdabfab";(注:这儿不是简单的相等因为w的首地址不等于s的首地址)
2.while外循环(作用:遍历所有w中的字符)
p = w; //令p="abcdabfab";且p的首地址等于w的首地址
r = t1;//令r="ab";且r的首地址等于t1的首地址
3.while内循环(作用:查找与t1相同的子串)
1)if此时r指向a,而p指向的也是a,所以*r=*p,然后r++;p++(r、p的地址++,指向下一个元素)此时*r=*p="b";成立,然后r++;p++,此时*r = NULL,所以while循环跳出
2)if循环,此时*r == '\0'成立,
------解决方案--------------------
C/C++ code

void fun (char *s, char *t1, char *t2 , char *w)
{
    char *p , *r, *a;
    strcpy(w, s);
    while (*w)
    {
        p = w; 
        r = t1;
        while (*r)//开始遍历r中的每个字符
        {
            if (*r == *p) //相等r和p指针各+1
            {
                r++; 
                p++;
            }
            else //不相等直接跳出循环
                break;
        }
        if (*r == '\0')//如果是跳出循环这里必不成立,否则就是在p中找到了匹配的字符串
        {
            a = w; //这里使用w是因为w指针未变动
            r = t2;
            while (*r)//挨个赋值
            {
                *a = *r; 
                a++; 
                r++;
            }
            w += strlen(t2);//赋值成功后w指针往后移动strlen(t2)个位置
        }
        else //匹配循环由break跳出,所以指针w往后移动一位,继续重复上述动作(对于较长的字串用kmp算法较好一些)
            w++;
    }
}