字符串替换编程,要求逐行解释,100分恭送

来源:百度知道 编辑:UC知道 时间:2024/06/28 20:20:38
这道编程题是这样的:将字符串s1中的所有与字符串str1相同的子串体替换成字符串str2,并将替换后的新串存于字符数组s2中。

网上有这样两种编程:

一、#include<stdio.h>
void replace(s1,s2,str1,str2)
char *s1,*s2,*str1,*str2;
{ char *t0,*t1,*t2,*x,*y;
x-s1;y=s2;
while(*s1) /* *s1!=’\0’ */
{for(t0=s1,t1=str1;(*t1!=’\0’&&*t0==*t1);t0++,t1++);
if(*t1!=’\0’)
{ t0--;
while(s1!=t0) *s2++ = *s1++;
t0++;
}
else
{for(t1=str2;*t1!=’\0’) *s2++ = *t1++;
s1=t0; /* or s1=s1+strlen(str1) */
}
}
*s2=’\0’;
}
main()
{ static char s1[]=”abcef ababcd abab.”,s2[25];
replace(s1,s2,”abc”,”XYZ”);
printf(“%s \n”,s2);
}

二、http://zhidao.baidu.com/question/6349730.html
#include <stdio.h>
void replace (char *s1, char *s2, char *str1, char *str2)
{
char *t0, *t1;
while ( *

你的两道编程有问题是铁定的,两道编程都有错误。
首先我们说一说这两道编程共同的问题。
一、FOR循环:
执行条件是*t1!=’\0’&&*t0==*t1,也就是说t1与t0相等的时候才执行FOR循环,那么我们假设s1数组上来就有字母与str1不一致,假设s1是"efabcef ababcd abab.”,str1是“abc”,那么我问你这时候要执行什么语句?答案是任何语句都执行不了,所以if语句在这里是必须的,如果有相同的就执行一个循环,没有相同的就直接把s1的字符附给s2;
二、s2附值问题:
{ if (*t1 != '\0')
*s2++ = *s1++;
else {for(t1=str2;*t1 != '\0' ;)
{
*s2++ = *t1++ ;
s1 = t0 ;
} } } }
和if(*t1!=’\0’)
{ t0--;
while(s1!=t0) *s2++ = *s1++;
t0++;
}
else
{for(t1=str2;*t1!=’\0’) *s2++ = *t1++;
s1=t0; /* or s1=s1+strlen(str1) */
} }
这里面的S2数组赋值都有问题,在这里我们首先要分析一下解题思路,实际上就是拿s1数组与str1数组做比较,如果s1数组中有与str1相同的字串那么就以str2数组替换,在比较的时候要分两种情况:一是s1数组与str1数组部分相等,这时候就不能立即拿str2替换,而要重新比较。二是s1数组与str1数组全部等同,这时就要拿str2替换了。在替换的时候还有一个问题,那就是s2指针必须要退回到一开始比较的地方,比如s1是abcef ababcd abab,那么比较完第一个abc时,s2指针要退回到a的地方,然后才能用str2数组xyz替换。而上面的两道编程都没解决这个问题,s1一直在自增,那么怎么能处理上述的问题呢?
三、if语句问题