c++使用栈实现括号匹配
给定一个表达式e,包含各种字符,如字母数字运算符标点空格和括号()[]{}等, 判断其中括号是否匹配,如是,则返回0, 否则根据错误类型返回1-3:
错误类型包括1、2、3类型:
类型1:
左右括号不匹配,如"(]", “(((]))))”, “((}”,“let {x=a[0)*(b+c); y=b}”
类型2:
发现有左括号不存在与之匹配的右括号,如"(", “(([]”, “()(()”
类型3:
发现右括号不存在与之匹配的左括号,如")", “())”,"(())()"。
代码:
#include<iostream>
#include<stack>
#include<cstring>
#include<cstdio>
using namespace std;
int matches(string a){
stack<char> s;
int l=a.length(),label=0;
char t;
for(int i=0;i<l;++i)
{
if(a[i]=='('||a[i]=='['||a[i]=='{')
{
s.push(a[i]);
}
if(a[i]==')'||a[i]==']'||a[i]=='}')
{
if(s.empty())return 3;