下面是我的理解,供你参考:
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
void replace_name(char * str,char * orgname,char * newname){
int i,j,k;
char buf[512];
for(i=0;str[i]!='\0';i++){
for(j=i,k=0;str[j]==orgname[k];j++,k++) //找到orgname的结束位置
;
if(orgname[k]=='\0'&&(i==0||!isalpha(str[i-1])&&(!isalpha(str[j])))){
//复制str字符串第j个字符开始的字符串到buf缓存数组
//即把原字符串里要替换的字符串后面复制到缓冲数组 ,备份老字符串后面的字符
strcpy(buf,str+j);
//复制新字符串到str字符串第i个字符的位置,完成一次替换操作
strcpy(str+i,newname);
//在替换操作完成后,在替换的新的字符串后复制上原orgname字符串后面的字符。
//补上原来的尾巴
strcpy(str+i+strlen(newname),buf);
}
}
}
int main(){
char s[512] = "Bob is good boy. We love Bob.";
char * olds = "Bob" ,* news="John";
puts(s);
replace_name(s,olds,news);
puts(s);
// replace_name(s,olds,news);
// puts(s);
getch();
return 0;
}