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

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

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

#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条回答 默认 最新

  • Call Me Gavyn 2020-05-01 10:40
    关注
    1. 73行: switch{} 多加了,刪掉;
    2. GetTop(S, e) 匹配返回值為bool,不能與(、{、[、 等匹配,需要修改返回值;
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证