King-MamBa
2020-04-30 21:06
采纳率: 100%
浏览 155

数据结构括号匹配问题求助!

求大神帮看看程序哪里有问题(数据结构括号匹配),程序能运行,但是不管输入什么都显示匹配?

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
const int STACK_INIT_SIZE=100;
const int STACKINCREMENT=10;
typedef char SElemType; 
typedef struct
{
    SElemType *elem;
    int top;
    int stacksize;
    int increment;
}SqStack;
// 初始化栈 
void InitStack(SqStack&S,int maxsize=STACK_INIT_SIZE,int incresize=STACKINCREMENT) 
{
    S.elem=new SElemType[STACK_INIT_SIZE];
    S.top=-1;
    S.stacksize=maxsize;
    S.increment=incresize;
}
//入栈
void Push(SqStack&S,SElemType e)
{
    if(S.top==S.stacksize)
    {
      S.stacksize=S.stacksize+STACKINCREMENT;
      SElemType *elem=new SElemType[S.stacksize];
      for(int i=0;i<=S.top;i++)
        elem[i]=S.elem[i];
        delete []S.elem;
        S.elem=elem;
    }
    S.elem[++S.top]=e;
}
//检查空栈
bool StackEmpty(SqStack S)
{
    if(S.top==-1)
     return true;
     else return false;
}
//取栈顶元素
bool GetTop(SqStack S,SElemType &e)
{
    if(S.top==-1) return false;
    e=S.elem[S.top];
    return true;
}

//让栈顶元素出栈
bool Pop(SqStack &S,SElemType&e)
{
    if(S.top==-1) return false;
    e=S.elem[S.top];
    S.top--;
    return true;
 } 

//括号匹配
bool matching(char exp[])
{
    SqStack S;
    InitStack(S);
    int state=1;
    char e;
    char ch=*exp++;
    while(ch != '#' &&state)
    {switch(ch)
      {
        switch (ch) {
            case'(':
            case'[':
            case'{':
            {
            Push(S, ch);
                break;  
            }

            case')':
                {

                if (!StackEmpty(S) && GetTop(S,e)== '(')
                    Pop(S, e);
                else state = 0;
                break;}
            case']':
                {

                if (!StackEmpty(S) && GetTop(S,e) == '[')
                    Pop(S, e);
                else state = 0;
                break;}
            case'}':
                {
                if (!StackEmpty(S) && GetTop(S,e) == '{')
                    Pop(S, e);
                else state = 0;
                break;}
          }
          default:break;
      }
      ch=*exp++;
     } 
     if(state&&StackEmpty(S))
     return true;
     else return false; 


 } 
 //主函数 
int main ()
 {
    int max=50;//数组容量 
    char a[max];
     cout<<"输入括号表达式(以“#”结尾)"<<endl;
    cin>>a;
      if(matching(a))
      {
     cout<<"括号匹配"<<endl;
      cout<<"\n";
      }
      else cout<<"括号不匹配"<<endl; 

  } 



  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • Happy_Enger 2020-05-01 10:40
    已采纳
    1. 73行: switch{} 多加了,刪掉;
    2. GetTop(S, e) 匹配返回值為bool,不能與(、{、[、 等匹配,需要修改返回值;
    打赏 评论

相关推荐 更多相似问题