⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 match.cpp

📁 检验括号是否匹配可以用堆栈来实现
💻 CPP
字号:
#include <stdio.h>
#include <malloc.h>

//定义顺序堆栈
#define STACK_SIZE 100
#define STACK_INC 10

#define Maxsize 100

typedef char Elem;

typedef struct{
     Elem *base;
     Elem *top;
     int size;
   }SqStack;


/*创建空堆栈*/
int  InitStack(SqStack &S)
{
    S.base=(Elem *)malloc(STACK_SIZE*sizeof(Elem));
    S.top=S.base;
    S.size=STACK_SIZE;
    return 1;
}

/*堆栈是否为空*/
int StackEmpty(SqStack S)
{
    if(S.top!=S.base) return 0;
    return 1;
}

/*进栈*/
int Push(SqStack &S,Elem e)
{
    if(S.top-S.base>=S.size)
    {
        S.base=(Elem *)realloc(S.base,(S.size+STACK_INC)*sizeof(Elem));
         S.top=S.base+S.size;
         S.size+=STACK_INC;
     }
     
    *S.top=e;
    S.top+=1;
    return 1;
}

/*出栈*/
int Pop(SqStack &S,Elem &e)
{
    if(S.top==S.base) return 0;
    S.top-=1;
    e=*S.top;
    return 1;
}

//括号匹配
int BracketMatch(SqStack &S,char *str)
{
  int i;        //定义字符串的控制变量
  int state;  //定义状态控制变量
  int state2;
  
  int priory;   //定义优先级变量
  
  Elem e;
  
  i = 0;
  state = 0;
  priory = 4;
  
  while(str[i]!='\0')
  {
      switch(str[i])
      {
       case '(': if(priory > 1)
                {
                    Push(S,'(');
                    priory =1;
                }
                else return 0;
                break;
       case '[':if(priory > 2)
                {
                   Push(S,'[');
                    priory =2;
                }
                else return 0;
                break;
       case '{':if(priory > 3)
                {
                   Push(S,'{');
                    priory =3;
                }
                else return 0;
                break;
                
      case ')':{Pop(S,e);
                if(e!='(') state=1; break;}
      case ']':{Pop(S,e);
                if(e!='[') state=1;break;}
      case '}':{Pop(S,e);
                if(e!='{') state=1;break;}
      default: break;
    }//switch
    
    if(state) break; //出现不匹配,立即结束循环
    
    i++;
  }//while
  
  state2=StackEmpty(S); //flag2判断堆栈是否为空
  
  if(!state && state2)  return 1;   //匹配,返回1
  else return 0;        //不匹配,返回0
}

//主函数
void main()
{
    int match;
    char str[Maxsize];
    char temp;
  
    SqStack S;
    InitStack(S);
    
    printf("input the string:");
    scanf("%s",str);
    //scanf("%c",&temp); //接受输入的回车键
    
    match = BracketMatch(S,str);
    
    if(match==1)
    {
        printf("*****The string match!*****\n");
    }
    else printf("*****The string don't match!*****\n");

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -