您的位置:首页 > 其它

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

2009-09-28 14:30 381 查看
/************************************************************************/
/*功能:从"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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐