c语⾔replace函数,C语⾔编写的ReplaceAll函数#include
#include
#include
char* replaceAll(char* src, char* find, char* replaceWith){
//如果find或者replace为null,则返回和src⼀样的字符串。
if(find == NULL || replaceWith == NULL){
return strdup(src);
}
//指向替换后的字符串的head。
char* afterReplaceHead = NULL;
//总是指向新字符串的结尾位置。
char* afterReplaceIndex = NULL;
//find字符串在src字符串中出现的次数
int count = 0;
int i,j,k;
int srcLen = strlen(src);
int findLen = strlen(find);
int replaceWithLen = strlen(replaceWith);
//指向src字符串的某个位置,从该位置开始复制⼦字符串到afterReplaceIndex,初始从src的head开始复制。
char* srcIndex = src;
//src字符串的某个下标,从该下标开始复制字符串到afterReplaceIndex,初始为src的第⼀个字符。
int cpStrStart = 0;
//获取find字符串在src字符串中出现的次数
count = getFindStrCount(src, find);
//如果没有出现,则返回和src⼀样的字符串。
if(count == 0){
return strdup(src);
}
//为新字符串申请内存
afterReplaceHead = afterReplaceIndex = (char*)malloc(srcLen + 1 + (replaceWithLen - findLen) * count);
//初始化新字符串内存
memset(afterReplaceHead, '\0',sizeof(afterReplaceHead));
for(i = 0,j = 0,k = 0;i!=srcLen;i++){
//如果find字符串的字符和src中字符串的字符是否相同。
if(src[i] == find[j]){
//如果刚开始⽐较,则将i的值先赋给k保存。
if(j == 0){
k = i;
}
//如果find字符串包含在src字符串中
if(j == (findLen-1)){
j = 0;
//拷贝src中find字符串之前的字符串到新字符串中
strncpy(afterReplaceIndex, srcIndex, i - findLen - cpStrStart + 1);
/
/修改afterReplaceIndex
afterReplaceIndex = afterReplaceIndex + i - findLen - cpStrStart + 1; //修改srcIndex
srcIndex = srcIndex + i - findLen - cpStrStart + 1;
//cpStrStart
cpStrStart = i + 1;
//拷贝replaceWith字符串到新字符串中
strncpy(afterReplaceIndex, replaceWith, replaceWithLen);
//修改afterReplaceIndex
afterReplaceIndex = afterReplaceIndex + replaceWithLen;
//修改srcIndex
srcIndex = srcIndex + findLen;
}else{
j++;
}
}else{
//如果find和src⽐较过程中出现不相等的情况,则将保存的k值还给i
if(j != 0){
i = k;
}
j = 0;
}
}
/
/最后将src中最后⼀个与find匹配的字符串后⾯的字符串复制到新字符串中。
strncpy(afterReplaceIndex, srcIndex, i - cpStrStart);
return afterReplaceHead;
}
int getFindStrCount(char* src, char* find){
int count = 0;
char* position =src;
int findLen = strlen(find);
while((position = strstr(position, find)) != NULL){字符串replace函数
count++;
position = position + findLen;
}
return count;
}
int main(void){
char* s = "12345345443344341334542345";
//调⽤函数replaceAll,s为源字符串,"345"为需要替换的字符串,”7890“为替换⽬的字符串。char* r = replaceAll(s, "345", "7890");
printf("%s\n",r);
//使⽤replaceAll函数后⼀定要free掉,因为replace内部会malloc结果字符串的内存。
free(r);
return 0;
}
标签:
版权申明:本站⽂章部分⾃⽹络,如有侵权,请联系:west999com@outlook
特别注意:本站所有转载⽂章⾔论不代表本站观点!
本站所提供的图⽚等素材,版权归原作者所有,如需使⽤,请与原作者联系。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论