字符串匹配及替换 C实现

来源:互联网 发布:手机号正则表达式js 编辑:程序博客网 时间:2024/05/16 15:10

(1)完成普通的子串查找及替换                                     

(2)当目标串已经包括替换子串时,不进行替换。  例如:"12345jkgkfdjgl;f123kdaj;fj"   将"123"替换为 "12345"   则第一个匹配子串不动。

(3)可以完成目标串替换为包含子串。                    例如:"12345jkgkfdjgl;f123kdaj;fj"   将"123"替换为 "12" 。


 
// 参数INPUT:// in      需要查找的源字符串// out     存放最后结果的字符串// outlen  结果字符串最大尺寸// src     要查找的子字符串// dst     替换的目标字符串// 参数OUTPUT:// ret     返回结果    //    <0   错误;//    >0   成功替换次数int strckrpl(char *in, char *out, int outlen, const char *src, char *dst){    char *p = in;    unsigned int  len = outlen - 1;    int ret = 0;    int srclen = 0;    int dstlen = 0;    // 这几段检查参数合法性    if((NULL == src) || (NULL == dst) || (NULL == in) || (NULL == out))    {        ret = -1;    }    else if((strcmp(in, "") == 0) || (strcmp(src, "") == 0))    {        ret = -2;    }    else if(outlen <= 0)    {        ret = -3;    }    else    {        srclen = strlen(src);        dstlen = strlen(dst);        while((*p != '\0') && (len > 0))        {            if(strncmp(p, src, srclen) != 0 )            {                int n = strlen(out);                out[n] = *p;                out[n + 1] = '\0';                p++;                len--;            }            else            {                strcat(out, dst);                len -= dstlen;                 if( strncmp(p,dst,dstlen) != 0 || dstlen < srclen)                {                    p += srclen;                    ret++;                }                else                {                    printf("find the dst string\n");                    p += dstlen;                }            }        }    }    return ret;}

0 0
原创粉丝点击