尝试进行双重迭代时,为什么会出现分段错误?

时间:2015-10-12 00:28:35

标签: c++ segmentation-fault

朋友们,我很难弄清楚为什么这段代码会被破坏。我正在尝试编写一个函数,如果方程是平衡的,则返回true(意味着它对每个打开的方程都有一个紧密的括号)。方程式作为字符串输入到函数中。我知道这样的代码存在于整个互联网上,但我正在尝试为学校作业制作原创内容。主函数(如下所示)输入函数中断的示例,它不会每次都中断。

#include <vector>
#include <string>
#include <iostream>
#include <map>

using namespace std;

bool isBalanced(string expression)
{
map<char,char> inv;
inv['(']=')';
inv['[']=']';
inv['{']='}';
vector<char> brackets;
for(int i = 0; i < expression.length(); i++)
{
char c = expression.at(i); 
    if(c=='{'|| c=='}'||c=='('||c==')'||c=='['|| c==']')
    {
        brackets.push_back(c);
    }
}
for(int i=0;i<brackets.size();i++)
{
    cout << brackets[i];
}
cout  << endl;
for(int i=0;i<=brackets.size();i++)
{
    if(brackets[i]=='{'||brackets[i]=='('||brackets[i]=='[')
    {
        for(int j=i;j<=brackets.size();j++)
        {   
            cout << inv[brackets[i]];
            if(brackets[j]==inv[brackets[i]])
            {
                brackets.erase(brackets.begin()+j);
                break;
            }
            else if(j==brackets.size())
            {
                return false;
            }
        }
    }
if (i==brackets.size()) 
{
    return true;
}

}
}

int main()
{
    string expression ="(()";
    if(isBalanced(expression))
    {
        cout << "IT WORKED";
    }
    else
    {
        cout << "NOOOOOO!!";
    }

    return 0;
}

// what if there is an extra last bracket?

1 个答案:

答案 0 :(得分:0)

您在循环中使用了错误的比较运算符。您应该使用i < brackets.size()j < brackets.size()代替。

相关问题