分类：电脑/网络-程序设计-C/C++
问题：替换问题~~~下列给定程序中,函数fun的功能是:将s所指字符串 
下列给定中,函数fun的功能是:将s所指字符串中出现的t1所指子串全部替换成t2所指子字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为abcdabfab,t1所指子串中的内容为ab,t2所指子串中内容为99时,结果,在w所指的数组中的内容应为99cd99f99。#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t1,char*t2,char*w){inti下列给定中,函数fun的功能是:将s所指字符串中出现的t1所指子串全部替换成t2所指子字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。例如,当s所指字符串中的内容为abcdabfab,t1所指子串中的内容为ab,t2所指子串中内容为99时,结果,在w所指的数组中的内容应为99cd99f99。#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t1,char*t2,char*w){inti;char*p,*r,*a;strcpy(w,s);while(*w){p=w;r=t1;while(*r)if(*r==*p){r++;p++;}elsebreak;if(*r=='\0'){a=w;r=t2;while(*r){*a=*r;a++;r++;}w+=strlen(t2);}elsew++;}}main(){chars[100],t1[100],t2[100],w[100];clrscr();printf("\nPleaseenterstrings:");scanf("%s",s);printf("\nPleaseentersubstringt1:");scanf("%s",t1);printf("\nPleaseentersubstringt2:");scanf("%s",t2);if(strlen(t1)==strlen(t2)){fun(s,t1,t2,w);printf("\nTheresultis:%s\n",w);}elseprintf(" (t1)!=strlen(t2)\n");}加粗的部分没有理解
回答：上没有显示有加粗的部分,我将其拷贝到了我的VC环境中,添加了一些注释,可能有助于你的理解,我想你还可以通过设置断点进行调试,这样可以加深理解.下面是我加了注释的文件#include<conio.h>#include<stdio.h>#include<string.h>voidfun(char*s,char*t1,char*t2,char*w){inti;char*p,*r,*a;//声明临时指针变量strcpy(w,s);//将初始字符串s的内容拷贝至字符串w中while(*w)//对字符串w的内容进行循环操作,对应最末尾的w++{p=w;r=t1;//对临时变量p,r赋值while(*r)//对字符串r进行循环,找出与字符串w相同的字符if(*r==*p)//如果找到就继续循环,使r,p(相当于w)均自增,否则就跳出循环{r++;p++;}elsebreak;if(*r=='\0')//当r的内容不再等于p中相应位置的值时,判断r(即要替换的字符串t1){//是否自增到了结尾,若不是,则令w继续自增a=w;//若是,就把w值赋给另一变量ar=t2;//令r等于要替换的字符串while(*r)//循环完成替换操作{*a=*r;//对字符串a(相当于w)和r对应位置的值进行替换a++;r++;}w+=strlen(t2);//交换完后,将w后移t2字符串的长度单位开始继续查找.比如说,}elsew++;}}main(){chars[100],t1[100],t2[100],w[100];//clrscr();printf("\nPleaseenterstrings:");scanf("%s",s);printf("\nPleaseentersubstringt1:");scanf("%s",t1);printf("\nPleaseentersubstringt2:");scanf("%s",t2);if(strlen(t1)==strlen(t2)){fun(s,t1,t2,w);printf("\nTheresultis:%s\n",w);}elseprintf(" (t1)!=strlen(t2)\n");}