给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。
输入格式:
输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。
输出格式:
如果括号配对,输出yes,否则输出no。
输入样例1:
sin(10+20)
输出样例1:
yes
输入样例2:
{[}]
输出样例2:
no
代码:
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
int main()
{
stack<int> stk;
string x,s;
getline(cin,x);
int len1=x.size();
for(int i=0;i<len1;i++) //先从字符串中找出括号
{
if(x[i]=='(' || x[i]==')' || x[i]=='[' || x[i]==']' || x[i]=='{' || x[i]=='}')
s+=x[i];
}
int len2=s.size(); //求s中所有括号的匹配问题
if(len2<2) //小于两个括号无法凑对,直接输出no
{
cout<<"no"<<endl;
return 0;
}
for(int i=0;i<len2;i++)
{
if(s[i]=='(' || s[i]=='[' || s[i]=='{') //左括号直接入栈
stk.push(s[i]);
else
{
if(stk.empty()) //当前为右括号,且栈为空,该右括号必定匹配不到,直接break,输出no
{
stk.push(s[i]); //使栈不为空的退出,否则会输出yes
break;
}
if(s[i]==')' && stk.top()=='(') stk.pop(); //匹配
else if(s[i]==']' && stk.top()=='[') stk.pop();
else if(s[i]=='}' && stk.top()=='{') stk.pop();
}
}
if(stk.size()) cout<<"no"<<endl;
else cout<<"yes"<<endl;
return 0;
}