问答题 给定程序MODI1.C中函数fun的功能是:将s所指字符串中出现的与t1所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,要求t1和t2所指字符串的长度相同。
例如,当s所指字符串中的内容为:"abcdabfab",t1所指子串中的内容为:"ab",t2所指子串中的内容为:"99"时,结果在w所指的数组中的内容应为:"99cd99f99"。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#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()
{
chars[100],t1[100],t2[1003,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");
}
【正确答案】
【答案解析】while(*r) *a=*r;a++;r++; [解析] 该程序功能是将字符串中的某个子串全部替换成某个子串。从已给定源程序的main主函数开始入手,语句“fun(s,t1,t2,w);”调用fun函数,通过while循环首先比较两个子串是否相同,然后进行替换,实现题目要求。
(1)函数通过while语句比较r所指字符串是否和p所指的子串相同,若有相同,会一直循环到*r是"/0"才退出循环。所以第二个标识下的“while(r)”改为“while(*r)”。
(2)C语言中,语句应该以“;”结束,在第二个标识处,“r++”语句没有以“;”结束,因此第二个标识处应该是“*a=*r;a++;r++;”。
[考点] 函数逻辑;指针操作。