题目链接:http://codeup.cn/problem.php?cid=100000602&pid=1
题目描述
请写一个程序,判断给定表达式中的括号是否匹配,表达式中的合法括号为”(“, “)”, “[", "]“, “{“, ”}”,这三个括号可以按照任意的次序嵌套使用。
输入
有多个表达式,输入数据的第一行是表达式的数目,每个表达式占一行。
输出
对每个表达式,若其中的括号是匹配的,则输出”yes”,否则输出”no”。
样例输入
4
[(d+f)*{}]
[(2+3))
()}
[4(6]7)9
样例输出
yes
no
no
no
代码
#include <cstdio>
#include <stack>
#include <string>
#include <iostream>
using namespace std;
stack<char> s;
bool judge(string str){
for(string::iterator it = str.begin(); it != str.end(); it++){
if(*it =='('|| *it =='['|| *it =='{')
s.push(*it);
if(*it == ')') {
if(!s.empty() && s.top()=='(')
s.pop();
else
return false;
}
if(*it == ']') {
if(!s.empty() && s.top()== '[')
s.pop() ;
else
return false;
}
if(*it =='}'){
if(!s.empty() && s.top()== '{')
s.pop() ;
else
return false;
}
}
if(s.empty())
return true;
else
return false;
}
int main(){
int n;
scanf("%d", &n);
getchar();
while(n--){
string str;
getline(cin, str);
if(judge(str)==true)
printf("yes\n");
else
printf("no\n");
while(!s.empty())
s.pop() ;
}
return 0;
}
【注】:pop()前先要判断栈是否为空。