首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于检查平衡()、{}和[]字符串的C++程序

用于检查平衡()、{}和[]字符串的C++程序
EN

Stack Overflow用户
提问于 2012-10-06 13:42:56
回答 6查看 12.3K关注 0票数 3

所以我的问题是:

我应该编写一个c++程序来检查要平衡的字符串。到目前为止,我已经让代码确保(和)的数量相同(和[和{一样)。问题是这对几乎所有的东西都有效,但对于{,(和[都混淆的字符串)就不起作用了。

例如:"{ {()}() }“返回的结果应该是平衡的(true)。但是,"{ (} )“返回true,但它不应该返回true。

逻辑和/或代码中的一些想法是什么,当它们失序时会进行检查?

谢谢你的帮助!

如果有帮助,我的代码如下:

代码语言:javascript
复制
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;
}
EN

回答 6

Stack Overflow用户

发布于 2012-10-06 13:48:04

如果您使用Stack来存储这些标记,那么您总是在寻找与堆栈顶部的标记或打开标记相对应的结束标记。

流程是这样的

  • 如果令牌是打开令牌,则将其推送到堆栈上。
  • 如果令牌是关闭令牌,则检查堆栈顶部是否为对应的打开令牌。如果是,那么当你发现它们是平衡的时候,弹出堆栈。如果不是,那就是错误。
票数 5
EN

Stack Overflow用户

发布于 2012-10-06 14:09:38

看起来更像是家庭作业。所以我会做相应的评论,让你学到一些东西。

  1. 总是初始化你的变量。字符串不会在代码中初始化。
  2. 不会遍历字符串三次,只能检查字符串一次。
  3. 使用if-else if-else结构代替if-if-if结构。
  4. 始终使用方括号
  5. 要与您的用法一致,可以在()或[]中使用,但不要在代码中混合使用它们。
票数 0
EN

Stack Overflow用户

发布于 2013-02-21 02:33:35

代码语言:javascript
复制
//this code may help you check string for balanced brackets with no
//repeated brackets,paranthesis or braces (e.g. [2*{3/(1+2)}].Note: no repeatance of
//brackets
#include <iostream.h>
#include <conio.h>
#include "IntStack.h"
#include <stdio.h>
void main(void)
{
    char bracket[20];
    gets (bracket);
    char arr[6];
    int i=0;
    while(i<20)
    {
        switch(bracket[i])
            {
                case '[':
                {
                    arr[0]=1;
                    break;
                }
                case '{':
                {
                    arr[1]=2;
                    break;
                }
                case '(':
                {
                    arr[2]=3;
                    break;
                }
                case ')':
                {
                    arr[3]=3;
                    break;
                }
                case '}':
                {
                    arr[4]=2;
                    break;
                }
                case ']':
                {
                    arr[5]=1;
                    break;
                }
                default:
                    cout<<"";
        }
        i++;
    }
    if(arr[3]==arr[2])
        cout<<"";
    else
        cout<<" ) or ( is missing "<<endl;

    if(arr[1]==arr[4])
        cout<<"";
    else
        cout<<" } or { is missing "<<endl;

    if(arr[5]==arr[0])
        cout<<"";
    else
        cout<<" ] or [ is missing"<<endl;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12757098

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档