Chinaunix

标题: C的string.h里有没有字符串替换函数呢? [打印本页]

作者: depderik    时间: 2005-09-14 11:04
标题: C的string.h里有没有字符串替换函数呢?
rt
作者: depderik    时间: 2005-09-14 11:11
标题: C的string.h里有没有字符串替换函数呢?
谭的书上说strcpy(str1,str2,5)可以拷贝str2的前5个字符,我这儿怎么就是编译不过呢?
作者: James_xu    时间: 2005-09-14 11:14
标题: C的string.h里有没有字符串替换函数呢?
strncpy(str1,str2,5)
作者: feeling    时间: 2005-09-14 11:17
标题: C的string.h里有没有字符串替换函数呢?
[quote]原帖由 "depderik"]谭的书上说strcpy(str1,str2,5)可以拷贝str2的前5个字符,我这儿怎么就是编译不过呢?[/quote 发表:

  1. strcpy(str1, str2);
  2. // or
  3. strncpy(str1,str2,5);
复制代码

作者: feeling    时间: 2005-09-14 11:21
标题: C的string.h里有没有字符串替换函数呢?
C库里面是没有字符串替换函数的,自己写一个吧。贴一个现在用的^_^

  1. // 替换字符串中特征字符串为指定字符串
  2. int ReplaceStr(char *sSrc, char *sMatchStr, char *sReplaceStr)
  3. {
  4.         int  StringLen;
  5.         char caNewString[MAX_MSG_LENGTH];

  6.         char *FindPos = strstr(sSrc, sMatchStr);
  7.         if( (!FindPos) || (!sMatchStr) )
  8.                 return -1;

  9.         while( FindPos )
  10.         {
  11.                 memset(caNewString, 0, sizeof(caNewString));
  12.                 StringLen = FindPos - sSrc;
  13.                 strncpy(caNewString, sSrc, StringLen);
  14.                 strcat(caNewString, sReplaceStr);
  15.                 strcat(caNewString, FindPos + strlen(sMatchStr));
  16.                 strcpy(sSrc, caNewString);

  17.                 FindPos = strstr(sSrc, sMatchStr);
  18.         }

  19.         return 0;
  20. }
复制代码

作者: depderik    时间: 2005-09-14 11:40
标题: C的string.h里有没有字符串替换函数呢?
very thanks!
作者: mq110    时间: 2005-09-14 12:05
标题: C的string.h里有没有字符串替换函数呢?
[quote]原帖由 "depderik"]very thanks![/quote 发表:


这英语...昏.
作者: yunlin    时间: 2005-09-23 23:29
标题: C的string.h里有没有字符串替换函数呢?
/*C字符串替换函数
调用成功返回指向被替换后新字符串的指针失败返回NULL
调用之后用free()释放*/
char *strrep(char *str,char *str1,char *str2)
{
        char *s;
        unsigned long int len;
        register unsigned long int i=0;
        char *temp;
        temp=str;
        while (strstr(temp,str1)!=NULL){
            temp=strstr(temp,str1)+strlen(str1);
                i++;}
        len=(strlen(temp)-strlen(str1)*i+strlen(str2)*i)*sizeof(char);
        s=(char *)malloc(len);
        if (s!=NULL){
        s="s";
        while (strstr(str,str1)!=NULL)
                {
                s=strncat(s,str,(strstr(str,str1)-str));
                s=strcat(s,str2);
                str=strstr(str,str1)+strlen(str1);}
    s=strcat(s,str);
    s=s+1;
    return(s);}
        else{
                return NULL;}
}
注:str表示源字符串 str1表示特征字符串 str2表示指定字符串
作者: soul_of_moon    时间: 2005-09-24 00:14
标题: C的string.h里有没有字符串替换函数呢?
[quote]原帖由 "depderik"]谭的书上说strcpy(str1,str2,5)可以拷贝str2的前5个字符,我这儿怎么就是编译不过呢?[/quote 发表:

你是不是晕了,应该用strncpy
作者: bleem1998    时间: 2005-09-24 08:06
标题: C的string.h里有没有字符串替换函数呢?
以前也写过一个
是为了替换掉SQL语句中的一些字符
例如
select * from tab where id=':a'
--->;
select * from tab where id='Sam'


  1. /*
  2. descript:replace str,返回一个替换以后的字符串,用完之后要free()
  3. success:return 1
  4. error:return 0
  5. BUG:"select * from tab where id=':a' and name =':aa'",this is not support,this function is just simple str_replace ,not support all SQL language
  6. */
  7. char *replacestr(char *strbuf, char *sstr, char *dstr)
  8. {       char *p,*p1;
  9.         int len;

  10.         if ((strbuf == NULL)||(sstr == NULL)||(dstr == NULL))
  11.                 return NULL;

  12.         p = strstr(strbuf, sstr);       //返回字符串第一次出现的地址,否则返回NULL
  13.         if (p == NULL)  /*not found*/
  14.                 return NULL;

  15.         len = strlen(strbuf) + strlen(dstr) - strlen(sstr);
  16.         p1 = malloc(len);
  17.         bzero(p1, len);
  18.         strncpy(p1, strbuf, p-strbuf);
  19.         strcat(p1, dstr);
  20.         p += strlen(sstr);
  21.         strcat(p1, p);
  22.         return p1;
  23. }
复制代码

作者: xujunxp    时间: 2005-09-24 09:46
标题: C的string.h里有没有字符串替换函数呢?
你的头像太大了,影响我的页面了
作者: 依赛特小子    时间: 2005-09-26 10:49
标题: C的string.h里有没有字符串替换函数呢?
用C++标准库还是方便
作者: channel5    时间: 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);
作者: nietsche    时间: 2010-03-31 18:56
Bingo!!!
作者: bluewaterray    时间: 2010-03-31 21:35
还不如用正则,虽然有点杀鸡用牛刀的意思
作者: yulihua49    时间: 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)
作者: yulihua49    时间: 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.         }
复制代码

作者: linuxlixk    时间: 2010-04-01 18:04
{:3_190:}
作者: linuxlixk    时间: 2010-04-01 18:04
一直都是手写




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2