用于检查parallel()s,{}和[] s的字符串的C++程序

use*_*736 3 c++ brackets curly-braces parentheses

所以这是我的问题:

我应该写一个c ++程序来检查字符串是否平衡.到目前为止,我有代码工作,以确保它具有相同数量的('s和')(与['s和{'s相同).问题在于它适用于几乎所有的东西,但它不适用于{'s,('s和[都混淆了]的字符串.

例如:"{{[()]}()}"恢复为平衡(真实).但是,"{([]})"会回来,但不应该.

逻辑和/或代码中有哪些想法可以检查它们何时出现故障?

谢谢你的帮助!

万一有帮助,我的代码如下:

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;
}
Run Code Online (Sandbox Code Playgroud)

Vik*_*dor 5

如果您使用Stack来存储这些令牌,那么您总是在寻找与堆栈顶部或开放令牌对应的结束对应物.

流程将是

  • 如果令牌是开放令牌,则将其推入堆栈.
  • 如果令牌是关闭令牌,请检查堆栈顶部是否是相应的开放令牌.如果是,则在找到它们平衡时弹出堆栈.如果不是,那就是错误.