从字符串中删除括号的C++函数并不能完全捕获它们

Muf*_*Man 0 c++

我在c ++中编写了一个函数来从字符串中删除括号,但它并不总是因为某些原因而将它们全部捕获,我确信它非常简单.

string sanitize(string word)
{
int i = 0;

while(i < word.size())
{
    if(word[i] == '(' || word[i] == ')')
    {
        word.erase(i,1);
    }
    i++;
}
return word;
}
Run Code Online (Sandbox Code Playgroud)

样本结果:

输入:((3)8)8)8)8))7

产出:(38888)7

为什么是这样?我可以通过调用输出上的函数来解决问题(因此运行字符串两次),但这显然不是"好"的编程.谢谢!

Dan*_*her 11

if(word[i] == '(' || word[i] == ')')
{
    word.erase(i,1);
}
i++;
Run Code Online (Sandbox Code Playgroud)

如果删除括号,则下一个字符将移动到先前由括号占据的索引,因此不会检查它.用一个else.

if(word[i] == '(' || word[i] == ')')
{
    word.erase(i,1);
} else {
    i++;
}
Run Code Online (Sandbox Code Playgroud)