c语言void replace(str,ch)替换字符串,c语言之strreplace字符串替换

#include

#include

#include

//https://github.com/ssllab/temper1/blob/722991add4a6a239271e1f029ebe4daaad719496/strreplace.c

char * strreplace(char const * const original,

char const * const pattern, char const * const replacement)

{

size_t const replen = strlen(replacement);

size_t const patlen = strlen(pattern);

size_t const orilen = strlen(original);

size_t patcnt = 0;

const char * oriptr;

const char * patloc;

// find how many times the pattern occurs in the original string

for (oriptr = original; (patloc = strstr(oriptr, pattern)); oriptr = patloc + patlen)

{

patcnt++;

}

{

// allocate memory for the new string

size_t const retlen = orilen + patcnt * (replen - patlen);

char * const returned = (char *) malloc( sizeof(char) * (retlen + 1) );

if (returned != NULL)

{

// copy the original string,

// replacing all the instances of the pattern

char * retptr = returned;

for (oriptr = original; (patloc = strstr(oriptr, pattern)); oriptr = patloc + patlen)

{

size_t const skplen = patloc - oriptr;

// copy the section until the occurence of the pattern

strncpy(retptr, oriptr, skplen);

retptr += skplen;

// copy the replacement

strncpy(retptr, replacement, replen);

retptr += replen;

}

// copy the rest of the string.

strcpy(retptr, oriptr);

}

return returned;

}

}

//https://github.com/CurryGuy/lua-player-plus/blob/7cb0f6056ead933289cf7dacffd6ce54243630b7/lpp-c%2B%2B/Libs/strreplace.c

char *strreplace2(const char *src, const char *from, const char *to)

{

size_t size = strlen(src) + 1;

size_t fromlen = strlen(from);

size_t tolen = strlen(to);

char *value = malloc(size);

char *dst = value;

if ( value != NULL )

{

for ( ;; )

{

const char *match = strstr(src, from);

if ( match != NULL )

{

size_t count = match - src;

char *temp;

size += tolen - fromlen;

temp = realloc(value, size);

if ( temp == NULL )

{

free(value);

return NULL;

}

dst = temp + (dst - value);

value = temp;

memmove(dst, src, count);

src += count;

dst += count;

memmove(dst, to, tolen);

src += fromlen;

dst += tolen;

}

else /* No match found. */

{

strcpy(dst, src);

break;

}

}

}

return value;

}

//cl strreplace.c

//gcc strreplace.c

int main(int argc, char const *argv[])

{

char* data=strreplace("java1024android1024cpp1024 from china ","1024","\u6765\u81ea\u4e2d\u56fd");

printf("%s\n", data);

data=strreplace("java中文android中文cpp中文 from china ","中文","test");

printf("%s\n", data);

char* data2=strreplace2("java1024android1024cpp1024 from china ","1024","\u6765\u81ea\u4e2d\u56fd");

printf("%s\n", data2);

data2=strreplace2("java中文android中文cpp中文 from china ","中文","test");

printf("%s\n", data2);

return 0;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值