参考了王道的答案,但是显然这个程序只考虑了合法输入,对于非法输入会有 一定的问题
#include<bits/stdc++.h>
using namespace std;
//王道书上的正确解法
stack<char> s;
bool ismatch(const char *str)
{
int i = 0;
while(str[i] != '\0')
{
char t;
switch (str[i])
{
case '(':
s.push('(');
break;
case '[':
s.push('[');
break;
case '{':
s.push('{');
break;
case ']':
t = s.top();
s.pop();
if(t != '[')
{
return false;
}
break;
case ')':
t = s.top();
s.pop();
if(t != '(')
{
return false;
}
break;
case '}':
t = s.top();
s.pop();
if(t != '{')
{
return false;
}
break;
default:
break;
}
i++;
}
if(!s.empty())
{
printf("括号不匹配\n");
return false;
}
else
{
printf("括号匹配");
return true;
}
}
int main(void)
{
const char *s = "([{}])";
cout<<ismatch(s)<<endl;
return 0;
}