/************************************************************************/
/*功能:从"aaskdaskasaskadaskkg"中删除"ask"得到结果"adasadkg"
/*参数:ppRet 保存删除后结果的字符串的指针
/* strSrc 源字符串
/* strDel 需要删除的字符串
/*作者:王丽君
/*QQ:174636594
/*个人主页:http://hi.youkuaiyun.com/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;
}