1、(习题9.35)使用迭代器寻找和删除string对象中所有的大写字符
分析:主要考虑首字母是否为大写字母。否则会出现不可预知的中段错误
原错误代码:
string str="My name is WangPeiyong! Hello World!!";
string::iterator iter=str.begin();
while(iter!=str.end())
{
if (isupper(*iter)==true)
{
str.erase(*iter);
--iter;
}
else
iter++;
}
for (string::iterator it=str.begin();it!=str.end();++it)
{
cout<<*it;
}
cout<<endl;
调试不成功,出现中断错误 out of range
改正代码:
string str="My name is WangPeiyong! Hello World!!";
string::iterator iter=str.begin();
while(iter!=str.end())
{
if (isupper(*iter))
{
if (iter==str.begin())
{
str.erase(iter);
}
else
{
str.erase(iter);
--iter;
}
}
else
{
++iter;
}
}
主要是考虑了首字母为大写的情况,若情况成立,删除首字母后,--iter完成后地址不可预知故出现错误。