从"aaskdaskasaskadaskkg"中删除"ask"得到结果"adasadkg"

/************************************************************************/
/*功能:从"aaskdaskasaskadaskkg"中删除"ask"得到结果"adasadkg"

/*参数:ppRet   保存删除后结果的字符串的指针

/*         strSrc   源字符串

/*         strDel  需要删除的字符串
/*作者:王丽君
/*QQ:174636594
/*个人主页:http://hi.csdn.net/space.php
/************************************************************************/

void DelChar(char**ppRet, const char* strSrc, const char* strDel)
{

 assert((*ppRet != NULL) && (strSrc != NULL) && (strDel != NULL));
 const int ciDel = strlen(strDel);
 const int ciSrc = strlen(strSrc);

 int iRet = 0, //拷贝到ppRet中的字符的个数
  iEqual = 0;//与strDel相比较相同的字符的个数
 for (int i = 0, j = 0; i < ciSrc; i++, j++)//i为strSrc的下标,j为strDel的下标
 {
  if(j == ciDel)//如果下标移动与strDel的字符个数相等,则表示已经有一个要删除的字符串了
  {
   j = -1;
   i -= 1;
   iEqual = 0;
   continue;
  }
  if (strSrc[i] == strDel[j]) //如果对应位字符相同
  {
   ++iEqual;
   continue;
  }
  if (iEqual == 0)//如果对应位字符不同后,判断是否是要删除的字符串中的第一个字符
  {//是第一个字符
   memcpy((*ppRet)+iRet, strSrc+i, 1);
   iRet += 1;
   j = -1;
   iEqual =0;
  }
  else
  {//不是第一个字符
   memcpy((*ppRet)+iRet, strSrc+i-iEqual, iEqual);
   iRet += iEqual;
   j = -1;
   i -= 1;
   iEqual = 0;
  }
 }
 (*ppRet)[iRet+1] = '/0';//加上结束符
}

 

测试:

int main(void)

{

 char strSrc[] = "aaskdaskasaskadaskkg";
 char strDel[] = "ask";
 char* pRet = new char[strlen(strSrc)+1];
 DelChar(&pRet, strSrc, strDel);
 cout << pRet << endl;
 delete[]pRet;
 pRet = NULL;

 

 cin.get();

 return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值