【发布时间】:2012-09-27 06:00:08
【问题描述】:
这是我的问题:
我应该编写一个 C++ 程序来检查字符串是否平衡。到目前为止,我的代码可以确保它具有相同数量的 ('s 和 )'s(与 ['s 和 {'s 相同)。问题是这几乎适用于所有内容,但不适用于 {'s、('s 和 ['s 都混在一起的字符串。
例如:“{ { [ ( ) ] } ( ) }” 以应有的平衡 (true) 返回。但是,“{ ( [ ] } )” 会返回 true,但它不应该。
逻辑和/或代码中有哪些想法可以在它们出现故障时进行检查?
感谢您的帮助!
如果有帮助,我的代码如下:
bool ExpressionManager::isBalanced(string expression)
{
//remove whitespace
string edited;
for(int i = 0; i < expression.length(); i++)
{
if(expression[i] == ' ')
{
continue;
}
else
{
edited += expression[i];
}
}
expression = edited;
//set up brckets
string brackets;
for(int i = 0; i < expression.length(); i++)
{
if (expression.at(i)=='(')
{
brackets += expression.at(i);
}
if (expression.at(i)=='[')
{
brackets += expression.at(i);
}
if (expression.at(i)=='{')
{
brackets += expression.at(i);
}
if (expression.at(i)=='}')
{
brackets += expression.at(i);
}
if (expression.at(i)==']')
{
brackets += expression.at(i);
}
if (expression.at(i)==')')
{
brackets += expression.at(i);
}
}
int parenbal = 0;
int brackbal = 0;
int mustachebal = 0;
for (int i = 0; i<(brackets.size());i++)
{
if(brackets[i]=='(')
parenbal++;
if(brackets[i]=='[')
brackbal++;
if(brackets[i]=='{')
mustachebal++;
if(brackets[i]==')')
parenbal--;
if(brackets[i]==']')
brackbal--;
if(brackets[i]=='}')
mustachebal--;
}
bool isbalanced = false;
if ((mustachebal==0)&&(brackbal==0)&&(parenbal==0))
{
isbalanced = true;
}
//check for brackets mixed up with other stuff.
return isbalanced;
}
【问题讨论】:
-
提示:使用堆栈数据结构(例如
std::stack<char>)。 -
另一个提示:想象你被允许沿着字符串来回走动,当你选择时擦除字符......
标签: c++ brackets parentheses curly-braces