原理也很简单,就是检测到右括号时,看栈顶是不是对应的左括号,还有就是最后检查完了之后是不是有多余的左括号。
Tips: 可以把它整合进你的计算器里,甚至可以让计算器自动补齐括号。
#include <iostream>
#include <string>
#include <stack>
using namespace std;
bool paranthesisMatch(string &s)
{
stack<char> aux;//辅助检查栈
string::iterator itr;//字符串迭代器
bool result=true;
for(itr=s.begin();result && itr!=s.end();++itr)
switch(*itr){
case '(':case '[':case '{':aux.push(*itr);break;
case ')':if(aux.top()=='(') aux.pop();
else result=false;break;
case ']':if(aux.top()=='[') aux.pop();
else result=false;break;
case '}':if(aux.top()=='{') aux.pop();
else result=false;break;
}
if(!aux.empty()) result=false;
return result;
}
int main(int argc, char const *argv[])
{
string s;cin>>s;
cout<<boolalpha<<paranthesisMatch(s)<<endl;
return 0;
}