问题 A: 表达式括号匹配(stack)
时间限制: 1 Sec 内存限制: 128 MB
提交: 98 解决: 58
[提交] [状态] [命题人:xiaofang]
题目描述
假设一个表达式有英文字母(小写)、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于 255,左圆括号少于 20 个。
输入
输入文件 stack.in 包括一行数据,即表达式,
输出
输出文件 stack.out 包括一行,即“YES” 或“NO”。
样例输入 Copy
2*(x+y)/(1-x)@
样例输出 Copy
YES
直接上代码
#include <bits/stdc++.h>
using namespace std;
int main() {
stack<char> a;//栈
char s[1001],b;
int i=0;//栈第一个为'0'
while(cin>>b && b!='@') {//持续输入
s[i++]=b;
}
for(int i=0; i<strlen(s); i++) {
if(s[i]=='(') {
a.push(s[i]);
}
if(s[i]==')') {//判断括号是否符合要求
if(a.top()=='(' && !a.empty()) {
a.pop();
} else {
cout<<"NO";
return 0;
}
}
}
if(a.empty()) {//其实不判断感觉没问题,但就是有问题
cout<<"YES";
} else {
cout<<"NO";
}