表达式括号匹配
题目描述
假设一个表达式有英文字母(小写),运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。
请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。假设表达式长度小于 255,左圆括号少于 20 个。
输入格式
输入一行,一个表达式。
输出格式
如果括号匹配,输出“YES”,否则输出“NO”。
样例数据 1
输入
输出
样例数据 2
输入
输出
分析
栈的运用,很简单。
源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| #include <algorithm> #include <cstdio> #include <iostream> #include <stack> using namespace std;
template <class T> class Stack : public std::stack<T> { public: T pop() { T tmp = std::stack<T>::top(); std::stack<T>::pop(); return tmp; } }; Stack<char> st; int main(int argc, char const *argv[]) { ios::sync_with_stdio(false); cin.tie(NULL); int flag = 0; char buffer; do { buffer = getchar(); st.push(buffer); } while (buffer != '@'); while (!st.empty()) { switch (st.pop()) { case '(': flag++; break; case ')': flag--; break; } } cout << (flag ? "NO" : "YES"); return 0; }
|