#include<stdio.h>
#include<string.h>
int compare(char com[],char old[],int n);
int main(){
int i,j,k;
char *p;
char original[101],old[11],neww[11],com[11];
gets(original);gets(old);gets(neww);
for(p=original;*p!='\0';){
for(;*p!=old[0]&&*p!='\0';p++)printf("%c",*p);
if(*p=='\0')break;
for(i=0;i<strlen(old);i++){
com[i]=*(p+i);
}
k=compare(com,old,strlen(old));
if(k==strlen(old)){
for(j=0;j<strlen(neww);j++)printf("%c",neww[j]);
p+=k;
}
else{
for(j=0;j<k;j++,p++){
printf("%c",*p);
}
}
}
printf("\n");
return 0;
}
int compare(char com[],char old[],int n){
int i,r=0;
for(i=0;i<n;i++){
if(com[i]!=old[i])break;
r++;
}
return r;
}
本题关键在于字符串可能不止一处,采取了边打印边判断的方式,定义了一个比较原来字符串与要替换的字符串有几位一样的函数。
错误:
1 一开始定义的函数原来字符串与要替换的字符串一样返回1,否则0,但是7897895123 789 hhh 这类题目,判断了7897和7895不一样之后,指针直接+strlen(old),就从8开始比较了。
2 函数中形参为数组的格式不对。
3 for(;*p!=old[0]&&*p!='\0';p++)
if(*p=='\0')break;
没有加&&*p!=0,导致最后一次循环一直不停止。
改后没有加if(*p=='\0')break;导致又在超出gets范围的乱码中进了一次函数,输出一些乱码。(当时的k还是strlen(old)).