int replace(char* str, char* old, char* New) { char *i,*j,*m,*r,*w; int k,l; int g,h; int len_str,len_old,len_New; len_str=0;len_old=0;len_New=0; i=str; if(!str||!old||!New) { return -1; } while(*i != '\0') { len_str++; i++; } j=old; while(*j !='\0') { len_old++; j++; } w=New; while(*w !='\0') { len_New++; w++; } if(len_New!=len_old) { return -1; } if(len_str>0 && len_old==0) { return -1; } if(len_str<len_old) { return -1; } i = str; j = old; w = New; for(k=1;k<=len_str;k++) { m=i; for(l=1;l<=len_old;l++) { if(*m == *j) { ++m; ++j; } else { break; } } if(*j=='\0') { break; } ++i; j=old; } if(*j=='\0') { i=str; r=str; for(h=1;h<k;h++) { i++; r++; } for(g=k;g<=k+len_old-1;g++) { while(*w!='\0') { *i=*w; i++; r++; w++; } } return k; } return -1; }
时间: 2024-02-14 08:35:10 浏览: 57
string,CString,char*之间的转化
这段代码实现了一个字符串替换函数 replace(),它的作用是将字符串 str 中的 old 子串替换为 New 子串。如果替换成功,则返回 old 子串在 str 中第一次出现的位置;如果替换失败,则返回 -1。
具体实现过程是,首先计算出 str、old 和 New 的长度 len_str、len_old 和 len_New。如果 len_old 不等于 len_New,则说明 old 和 New 的长度不相等,无法替换,函数返回 -1。如果 len_old 为 0 且 len_str 大于 0,则说明 old 为空串,无法替换,函数返回 -1。如果 len_str 小于 len_old,则说明 old 不可能出现在 str 中,无法替换,函数返回 -1。
接下来,从 str 中查找 old 子串。具体做法是,从 str 的第一个字符开始逐个比较,如果当前字符和 old 的第一个字符相等,则从当前位置开始依次比较 str 和 old 的每一个字符,直到不相等或 old 结束。如果 old 结束,则说明找到了第一次出现的位置,记录下来,退出循环。如果 str 结束,则说明没有找到 old,函数返回 -1。
如果找到了 old,则在 str 中替换为 New。具体做法是,从第一次出现的位置开始,依次将 New 中的字符复制到 str 中,直到 New 结束。最后返回第一次出现的位置。
阅读全文