从"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;
}
/*功能:从"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;
}
相关文章推荐
- 【学习笔记】"ListView滑动删除 ,仿腾讯QQ"(二)
- mysql基础(六) 表删除时,报"Connot delete or update a parent row:a foreign key constraint fails"解决方案二
- "长按实现视图抖动和删除"功能知识点整理
- 删除"拒绝访问"的文件夹
- C++ scanf("%d\n",&mynum) 会产生什么结果
- 1234567890中间加上+、-或者""后变成的等式结果为110
- mybatis 使用 parameterType="Map" 传入值后 数据库中得到的却是 NULL
- 如何"借他人之手"实现可执行文件的自我删除
- 删除以"temp"开头的所有表
- 关于"con" "con." "nul" "nul."等文件的删除
- ExpandableListView实例(三)_实现QQ中"未分组"效果和"未分组"不可编辑删除功能
- baidu与goolge的“eclipse 输出文件夹"搜索结果
- 百度与google的“java 内存泄露 javacore"搜索结果
- GridView的第一列是ButtonField,字段名是"删除",想一点之后弹出确认框,否则返回.应该如何写?
- "自信比能力更重要,知识比财富更重要,诚实比勤奋更重要,宽容比原谅更重要,过程比结果更重要"
- 删除"监视程序运行时间"软件
- "ORA-01940: 无法删除当前已连接的用户"的解决方法
- "无法删除当前已连接的用户"处理办法
- 一个 ArrayList 对象 aList 中存有若干个字符串元素,现欲遍历该 ArrayList 对象,删除其中 所有值为"abc"的字符串元素,请用代码实现。
- 怪查询分析器能显示详细错误信息,但通过Ado的Errors得到的始终是"多步OLEDB错误"