这几步操作 都是什么意思

img

下面是我的理解,供你参考:


#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;
}