1353:表达式括号匹配(stack)
时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
假设一个表达式有英文字母(小写)、运算符(+,—,∗,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
【输入】
一行数据,即表达式。
【输出】
一行,即“YES” 或“NO”。
【输入样例】
2*(x+y)/(1-x)@
【输出样例】
YES
【提示】
【样例输入2】
(25+x)*(a*(a+b+b)@
【样例输出2】
NO
1. //'@'有可能不在字符串末尾 2. #include <iostream> 3. #include <cstdio> 4. #include <cstring> 5. #include <stack> 6. using namespace std; 7. stack<char> s; 8. char ch[260]; 9. int main(int argc, char *argv[]) 10. { 11. gets(ch); 12. for(int i=0;ch[i]!='@';i++){ 13. if(ch[i]=='(') s.push('('); 14. else if(ch[i]==')'){ 15. if(!s.empty())s.pop(); 16. else { 17. cout<<"NO"<<endl;return 0; 18. } 19. } 20. } 21. if(!s.empty()) cout<<"NO"<<endl; 22. else cout<<"YES"<<endl; 23. return 0; 24. }
1. #include <iostream> 2. #include <cstdio> 3. #include <stack> 4. using namespace std; 5. int main(int argc, char *argv[]) 6. { 7. stack<char> stk; 8. char exp[260]={0}; 9. gets(exp); 10. int i=0; 11. while(exp[i]!='@'){ 12. if(exp[i]=='(') 13. stk.push(exp[i]); 14. else if(exp[i]==')') 15. { 16. if(stk.size()) stk.pop(); 17. else { 18. cout<<"NO"<<endl; 19. return 0; 20. } 21. } 22. i++; 23. } 24. if(!stk.size()) cout<<"YES"<<endl; 25. else cout<<"NO"<<endl; 26. return 0;