类别 字符串处理
时间限制 2S 内存限制 1000Kb
问题描述
表达式中的合法括号为“(”、“)”、“[”、“]”、“{”、“}”,这三种括号可以按照任意的次序嵌套使用。 请写一个程序,判断给定表达式中的括号是否匹配,既左右括号顺序和数量都匹配。
输入说明 输入为一个表达式字符串,长度不超过50。
输出说明 对输入的表达式,若其中的括号是匹配的,则输出“yes”,否则输出“no”。
输入样例 样例1输入 [(d+f)*{}2] 样例2输入 [(2+3))
输出样例 样例1输出 yes 样例2输出 no
代码
#include <iostream> #include <stack> #include <string.h> using namespace std; int main(void) { char in[100]; cin.getline(in,100); stack<char> s; int len = strlen(in); for (int i=0;i<len;i++) { if (in[i] == '(' || in[i] == '[' || in[i] == '{')//进栈 s.push(in[i]); else if (in[i] == ')') { if (!s.empty() && s.top() == '(')//条件符合的话岀栈 s.pop(); else s.push(in[i]);//条件不符合的话让栈自暴自弃 } else if (in[i] == '}') { if (!s.empty() && s.top() == '{') s.pop(); else s.push(in[i]); } else if (in[i] == ']') { if (!s.empty() && s.top() == '[') s.pop(); else s.push(in[i]); } } if (s.empty()) cout << "yes" << endl; else cout << "no" << endl; }