免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: depderik
打印 上一主题 下一主题

[函数] C的string.h里有没有字符串替换函数呢? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2005-09-24 09:46 |只看该作者

C的string.h里有没有字符串替换函数呢?

你的头像太大了,影响我的页面了

论坛徽章:
0
12 [报告]
发表于 2005-09-26 10:49 |只看该作者

C的string.h里有没有字符串替换函数呢?

用C++标准库还是方便

论坛徽章:
0
13 [报告]
发表于 2005-09-26 11:11 |只看该作者

C的string.h里有没有字符串替换函数呢?

STRCPY(3)              FreeBSD Library Functions Manual              STRCPY(3)

NAME
     strcpy, strncpy -- copy strings

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <string.h>;

     char *
     stpcpy(char *dst, const char *src);

     char *
     strcpy(char * restrict dst, const char * restrict src);

     char *
     strncpy(char * restrict dst, const char * restrict src, size_t len);

论坛徽章:
0
14 [报告]
发表于 2010-03-31 18:56 |只看该作者
Bingo!!!

论坛徽章:
0
15 [报告]
发表于 2010-03-31 21:35 |只看该作者
还不如用正则,虽然有点杀鸡用牛刀的意思

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
16 [报告]
发表于 2010-04-01 13:49 |只看该作者
本帖最后由 yulihua49 于 2010-04-01 17:53 编辑
rt
depderik 发表于 2005-09-14 11:04

  1. /************************************************************************/
  2. /*function:strsubst 替换字符串函数                                                      */
  3. /*description:用'str'替换'from'的前cnt个字符                                                    */
  4. /************************************************************************/
  5. char *strsubst(char *from,int cnt,char *str)
  6. {
  7.         int i;
  8.         register char *cp, *cp1, *cp2;

  9.         if(!from)
  10.                 return 0;
  11.         i = strlen(from);
  12.         if(cnt < 0)
  13.                 cnt = 0;
  14.         else if(cnt > i)
  15.                 cnt = i;
  16.         else ;
  17.         i = str ? strlen(str) : 0;
  18.         if(i < cnt)                             /* delete some char*/
  19.         {
  20.                 cp1 = from + i;
  21.                 cp = from + cnt;
  22.                 while(*cp)
  23.                         *cp1++ = *cp++;
  24.                 *cp1 = 0;
  25.         }
  26.         else if (i > cnt)                       /* extend some*/
  27.         {
  28.                 cp2 = from + cnt;
  29.                 cp = from + strlen(from);
  30.                 cp1 = cp + i - cnt;
  31.                 while(cp >= cp2)
  32.                         *cp1-- = *cp--;
  33.         }
  34.         else ;
  35.         if(str)
  36.                 strncpy(from, str, i);

  37.         return (from + i);
  38. }
复制代码
返回指向替换后边的字节。
这个函数先删除若干字节再插入。应该先使用正则表达式查找旧串,设定替换的起点和字节数在调用本函数。返回指针也是精心策划的,用于循环连续替换。
前面有个函数返回串头,要继续搜索替换找不到新的起点。

这个函数运用的例子,连续替换环境变量的宏代换;
MYDIR=$HOME/$SEND/mydir
替换成:
MYDIR=/home/sdbc/send/mydir
这点程序居然是不良信息,害得我不得不用附件传。请版主检查一下该文件有何不良信息!!!
envsub.rar (548 Bytes, 下载次数: 13)

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
17 [报告]
发表于 2010-04-01 17:54 |只看该作者
本帖最后由 yulihua49 于 2010-04-01 17:59 编辑
返回指向替换后边的字节。
这个函数先删除若干字节再插入。应该先使用正则表达式查找旧串,设定替换的起点 ...
yulihua49 发表于 2010-04-01 13:49



  1.         
  2.             if(i) {
  3.      原来 c o m p f l g = 1 ;是不良信息!!!
  4.                 return -1;
  5.             }
  6.             
  7.         }

  8.        while(!(i=regexec(&env_rp,p,REGNUM,pmatch,0))) {
  9.                 for(envp=p+pmatch[1].rm_so;envp<p+pmatch[1].rm_eo;envp++) {
  10.                         env[i++]=*envp;
  11.                 }
  12.                 env[i]=0;
  13.                 envp=getenv(env);
  14.                 if(!envp) envp=".";
  15.                 p=strsubst(p+pmatch[0].rm_so,
  16.                         pmatch[0].rm_eo - pmatch[0].rm_so,envp);
  17.         }
复制代码

论坛徽章:
0
18 [报告]
发表于 2010-04-01 18:04 |只看该作者
{:3_190:}

论坛徽章:
0
19 [报告]
发表于 2010-04-01 18:04 |只看该作者
一直都是手写
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP