64,654
社区成员
发帖
与我相关
我的任务
分享
while(strIt != str.end())
{
if(*strIt == 'A')
strIt = str.erase(strIt);
else
strIt++;
}
上面这个对的
cin>>str;
string::iterator strIt = str.begin();
while(strIt != str.end())
{
if(*strIt == 'A')
strIt = str.erase(strIt);
}
楼主这个是错的. 当条件不成立时,就那死循环.因为条件不成立就无法执行 strIt = str.erase(strIt);
所以就不能指向下一个元素.
string::iterator temp;
for(unsigned int is = 0; is < str.size(); is++) // 最多查找str.size()次.
{
temp = find(str.begin(), str.end(), 'A'); //查找字符'A'找到之后返回迭代器,否则返回end
if(temp != str.end()) //条件成立之后删除.否则重新执行for语句继续查找
{
str.erase(temp);
}
}
所以就不会出现死循环.
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str;
cin>>str;
string::iterator strIt = str.begin();
while(strIt != str.end())
{
if(*strIt == 'A')
{
strIt = str.erase(strIt);
}
else
strIt++;
}
cout<<str<<endl;
}
string::iterator strIt = str.begin();
while(strIt != str.end())
{
if(*strIt == 'A')
strIt = str.erase(strIt);
++strIt;
}
while(strIt != str.end())
{
if(*strIt == 'A')
strIt = str.erase(strIt);
else
strIt++;
}