用栈实现
1、初始化一个栈,用来存左括号
2、遍历扫描括号字符串
- 如果遇到左括号,无脑入栈
- 如果遇到右括号,此时栈空返回false,不空的话进行括号匹配。匹配不成功返回false,匹配成功将栈顶的那个左括号出栈。
遍历完之后,按理说栈是空的,如果不空就出错了返回false。
#include<iostream>
#include<string>
#include<stack>
using namespace std;
bool bracketCheck(string s,stack<char> op){for(int i=0;i<s.length();i++){if(s[i]=='{'||s[i]=='['||s[i]=='('){//扫描到左括号,入栈op.push(s[i]); }else{//扫描到右括号if(op.empty()) return false;//扫描到右括号,且当前栈空,失败if(s[i]=='}'&&op.top()=='{'||s[i]==']'&&op.top()=='['||s[i]==')'&&op.top()=='('){//匹配成功 op.pop(); }else{//匹配失败 return false; }}}if(!op.empty()){return false;}else{//遍历完之后,栈一定是空的 return true;}
}
int main(){string s;while(true){stack<char> op;//括号栈,只有左括号cin>>s;if(bracketCheck(s,op)){cout<<"匹配成功"<<endl;}else{cout<<"匹配失败"<<endl;}}return 0;
}