免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 4667 | 回复: 22
打印 上一主题 下一主题

[函数] 大家有没有用C写过替换字符串的函数? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-07-28 14:25 |只看该作者 |倒序浏览
如题
SirFang 该用户已被删除
2 [报告]
发表于 2005-07-28 14:56 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2005-07-28 15:31 |只看该作者

大家有没有用C写过替换字符串的函数?

我刚写了一个:
  1. #include <stdio.h>;
  2. #include <string.h>;
  3. #include <stdlib.h>;

  4. char *str_replace(char string[] ,char old[] ,char new[] ,int lenth)
  5. {
  6.     char *ret,*here;
  7.     int n;

  8.     if((here=strstr(string,old))==NULL)
  9.         return NULL;
  10.     ret=(char *)malloc(sizeof(char)*lenth);
  11.     n=strlen(string)-strlen(here);
  12.     memcpy(ret,string,n);
  13.     memcpy(ret+n,new,strlen(new));
  14.     memcpy(ret+n+strlen(new),here+strlen(old),strlen(here)-strlen(old));
  15.     return ret;
  16. }

  17. int main()
  18. {
  19.     printf("%s\n",str_replace("abcd1234efg","1234","654321",20));//长度大于替换的串.
  20.     printf("%s\n",str_replace("abcd1234efg","1234","xyz",20));//长度小于替换的串.
  21.     printf("%s\n",str_replace("abcd1234efg","1234","wxyz",20));//长度等于替换的串.
  22.     return 0;
  23. }
复制代码

  1. [root@Reinnat tmp]# ./097
  2. abcd654321efg
  3. abcdxyzefg
  4. abcdwxyzefg
复制代码


全都替换成功了.

函数里有个lenth.这需要程序员自己把握.最终的字符串有多长.否则发生不可预料的事 只能赖程序员自己了.

论坛徽章:
0
4 [报告]
发表于 2005-07-28 15:43 |只看该作者

大家有没有用C写过替换字符串的函数?

谢了哥们。拿回去好好研究一下。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2005-07-28 15:45 |只看该作者

大家有没有用C写过替换字符串的函数?

你挣钱.我写函数. 挺美的.~

当玩了.

论坛徽章:
0
6 [报告]
发表于 2005-07-28 15:45 |只看该作者

大家有没有用C写过替换字符串的函数?

潜在的越界可能

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
7 [报告]
发表于 2005-07-28 15:49 |只看该作者

大家有没有用C写过替换字符串的函数?

测试用例给了 多了些 没发现什么问题.

lenth需要自己把握.

  1.     printf("%s\n",str_replace("abcd1234efg","1234","654321",20));
  2.     printf("%s\n",str_replace("abcd1234efg","1234","xyz",20));
  3.     printf("%s\n",str_replace("abcd1234efg","1234","wxyz",20));
  4.     printf("%s\n",str_replace("abcd1234efg","abcd","efg",20));
  5.     printf("%s\n",str_replace("abcd1234efg","efg","abcd",20));
复制代码

论坛徽章:
0
8 [报告]
发表于 2005-07-28 15:50 |只看该作者

大家有没有用C写过替换字符串的函数?

还有内存泄漏呢

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
9 [报告]
发表于 2005-07-28 15:52 |只看该作者

大家有没有用C写过替换字符串的函数?

返回 堆上的就内存泄露了 ???

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
10 [报告]
发表于 2005-07-28 15:58 |只看该作者

大家有没有用C写过替换字符串的函数?

我记得返回 堆上空间没问题的.结束的时候有OS 负责回收这些空间的.

如果不对 请指教.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP