字符串的一般性应用--替换,删除

做tr069协议客户端时遇到要把从服务器传过来的xml buffer里的&lt;转换成<,把&gt;转换成>,随手写了一个转换接口,想删除匹配的字符中也较常就再写了一个删除接口

 

 

#include <stdio.h>
#include <string.h>
#include <assert.h>

/*****************************************************************************
函数名称    :  strReplace
:
功能        :  用字符串strNew替换源字符串strSrc中的子字符串strOld,把最终生成的字符串放到strDest
:
输入参数    :  strDest : 一段内存的地址
            :  strSrc  : 源字符串
            :  strOld : 源字符串中要被替换的子字符串
            :  strNew : 用新的strNew替换掉老的子字符串
:
输出参数    :  strDest : 最终生成的新的字符串
:
返回值      :  -1:  返回失败 
            :  0 :  返回成功
*****************************************************************************/
int strReplace(char *strDest,char *strSrc,char *strOld,char *strNew)
{
    char *pSrcPos = strSrc;
    int preLen = 0;//找到strOld之前距pSrcPos有多少字节
    char *offset = NULL;
    int destOff = 0;
   
    assert((NULL != strDest) && (NULL != strSrc) && (NULL != strOld) && (NULL != strNew));

    while (NULL != (offset = strstr(pSrcPos,strOld) ) )
    {
        preLen = offset - pSrcPos;

        memcpy(strDest+destOff,pSrcPos,preLen);

        memcpy(strDest+destOff+preLen,strNew,strlen(strNew) );
       
        destOff += preLen +strlen(strNew);
        pSrcPos += preLen+strlen(strOld);
    }
    strcpy(strDest+destOff,(const char*)pSrcPos);
   
    return 0;
}

/*****************************************************************************
函数名称    :  strDeleteStr
:
功能        :  删除字符串strSrc中的所有strDel子字符串,保存在strDest中
:
输入参数    :  strDest : 一段内存的地址
            :  strSrc  : 源字符串
            :  strDel: 源字符串中要被删除的子字符串

:
输出参数    :  strDest : 最终生成的新的字符串
:
返回值      :  -1:  返回失败 
            :  0 :  返回成功
*****************************************************************************/
int strDeleteStr(char *strDest,char *strSrc,char *strDel)
{
    char *pSrcPos = strSrc;
    char *offset = NULL;
    int preLen = 0;
    int destOff = 0;
   
    while (NULL != (offset = strstr(pSrcPos,strDel) ) )   //如果是删除的是字符可以换成strchr,道理差不多
    {
        preLen = offset - pSrcPos;
        memcpy(strDest+destOff, pSrcPos, preLen);

        pSrcPos += preLen + strlen(strDel);
        destOff += preLen;
    }
    strcpy(strDest+destOff,pSrcPos);
    return 0;
}

int main(void)
{   
        char *p = "&lt;?xml version=/"1.0/" encoding=/"utf-8eterList&gt;&lt;loaderInfo&gt;";
           
        char * newStr = NULL;
        char dest[1024];
        int ret = 0;
        char delDest[1024];


        memset(dest,0,1024);

        ret = strReplace(dest,p,"&lt;","<");
        printf("%s/n",dest);
        memset(delDest,0,1024);
        ret = strDeleteStr(delDest,dest,"<");
        printf("%s/n",delDest);
        return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值