C++ Primer 习题9.35给出的答案如下:
#include<iostream>
#include<cctype>
#include<string>
using namespace std;
int main()
{string str = "This IS A Example";
for(string::iterator iter = str.begin();
iter != str.end();++iter){
if(isupper(*iter)){
str.erase(iter);
--iter;
}
}
for(string::iterator iter = str.begin();
iter != str.end();++iter)
cout<<*iter<<" ";
return 0;
}
以上运行报错。
解:
由于第一个字母为T,--iter后
--iter--ite,,r则超出迭代范围了。
改成string str = "this is A exaMple";
如下,则可通过
#include<iostream>
#include<cctype>
#include<string>
using namespace std;
int main()
{
string str = "this is A exaMple";
for(string::iterator iter = str.begin();
iter != str.end();++iter){
if(isupper(*iter)){
str.erase(iter);
--iter;
}
}
for(string::iterator iter = str.begin();
iter != str.end();++iter)
cout<<*iter<<" ";
return 0;
}