做tr069协议客户端时遇到要把从服务器传过来的xml buffer里的<转换成<,把>转换成>,随手写了一个转换接口,想删除匹配的字符中也较常就再写了一个删除接口
#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 = "<?xml version=/"1.0/" encoding=/"utf-8eterList><loaderInfo>";
char * newStr = NULL;
char dest[1024];
int ret = 0;
char delDest[1024];
memset(dest,0,1024);
ret = strReplace(dest,p,"<","<");
printf("%s/n",dest);
memset(delDest,0,1024);
ret = strDeleteStr(delDest,dest,"<");
printf("%s/n",delDest);
return 0;
}