朋友们,我真的很难弄清楚为什么这段代码会崩溃。我试图写一个函数,返回真,如果一个方程是平衡的(这意味着它有一个闭括号为每一个开放的)。方程作为字符串输入到函数中。我知道像这样的代码在互联网上到处都有,但我正试图为学校的作业制作原创内容。main函数(如下所示)输入一个示例,说明函数何时中断,它不会每次都中断。
#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?
您在循环中使用了错误的比较操作符。您应该使用i < brackets.size()
和j < brackets.size()
代替。