括号匹配(C++数据结构)
描述:给出由()、{}、[]三种类型括号所组成的字符串,判断所给字符串中的括号能否全部匹配,若能匹配,则输出true!,否则输出false!
输入输出示例
输入
({})
([{])
输出
true!
false!
此题需要用到栈(stack),为了便于简单,直接调用stack标准库,首先将所有的左括号,即(、{、[,压入栈中,然后按顺序和右括号进行匹配判断,只要有一个不能匹配成功,则匹配失败。
下面是我的代码:
#include<iostream>
#include<string.h>
#include<stack>//调用标准库
using namespace std;
int main()
{
char s[50];
stack<char>st;//建立一个字符型栈
while(cin>>s)
{
while(!st.empty())
{st.pop();}
int len=strlen(s),flag=1;
for(int i=0;i<len;i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
st.push(s[i]);//将左括号压入栈中
else
{
if(st.empty())
{
flag=0;
break;
}
char t=st.top();
st.pop();
if(s[i]==')'&&(t=='['||t=='{'))
{
flag=0;
break;
}
else if(s[i]=='}'&&(t=='('||t=='['))
{
flag=0;
break;
}
else if(s[i]==']'&&(t=='{'||t=='('))
{
flag=0;
break;
}
}
}
if(!st.empty())
flag=0;
if(flag==1)
cout<<"true!"<<endl;
else
cout<<"false!"<<endl;
}
return 0;
}