我想要做的是让用户输入他们喜欢的格式的电话号码,然后删除用户在其输入中使用的助手字符使用循环比较每个字符在带有另一组定义的助手字符的字符串中,如果存在匹配,则从字符串中擦除该字符。我将这作为练习问题来开发我对迭代器的理解。我已经成功完成了这个循环的小事。然而,当我尝试这样做的时候,只要有两个助手字符,例如“(+”循环不会为下一个字符(本例中为“+”)运行,它会直接跳到“9 “并且在那之后工作正常,如果其他辅助字符在字符串后面出现,它的行为也是一样的,我通过放置一个cout < < *我刚刚在第一个for循环中检查了这个,我不明白为什么这个会怎样呢?因为这个方案没有做它应该和出看跌期权“91892333”,而不是所期望的“91892333”。循环字符串时迭代器故障
#include <iostream>
#include <string>
using namespace std;
int main()
{
string main = "(+91)892-333";
string dictionary = "(+)-";
for(string::iterator i = main.begin(); i != main.end(); i++)
{
for(char word : dictionary)
{
if(*i == word)
{
main.erase(i);
break;
}
}
}
cout << main;
}
得到它添加一个i--擦除功能后像一个魅力,但不应该迭代器失效? –
当你在C++上编写时,使用boost非常常见。这是STL的一个游乐场。有boost/algorithm/string/erase.hpp,你可以在其中找到你想要的功能。或者你可以使用std :: remove_if,然后用substr删除未使用的字符串结尾。 –