烟大 2238: 括号匹配(栈和队列)

来源:互联网 发布:最新网络诈骗新闻2017 编辑:程序博客网 时间:2024/05/16 15:41

2238: 括号匹配(栈和队列)

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 2  Solved: 2
[Submit][Status][Web Board]

Description

假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[{… …[]][]())。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。

Input

5+{[2X5]+2}

Output

YES

Sample Input

8-[{2+7]}

Sample Output

NO

HINT

Source 


 Code:

 1 /* 2 所用操作函数: 3 empty() 堆栈为空则返回真 4 pop()   移除栈顶元素 5 push()  在栈顶增加元素 6 top()   返回栈顶元素 7 */ 8 #include <iostream> 9 #include <stack>10 #include <string.h>11 using namespace std;12 int main()13 {14     string l;15     while(cin>>l){16         stack <char> s; //放到循环外定义就错了,每次循环都要初始化17         bool f=true;18         for(int i=0;i<l.length();i++){19             switch(l[i]){20             case '(':s.push('(');break;21             case '[':s.push('[');break;22             case '{':s.push('{');break;23             case ')':if(s.top()!='(') f=false;      //如果栈顶元素值与当前字符括号匹配则将匹配的前括号出栈24                     else s.pop();25                     break;26             case ']':if(s.top()!='[') f=false;27                     else s.pop();28                     break;29             case '}':if(s.top()!='{') f=false;30                     else s.pop();31                     break;32             default:break;33             }34             if(!f) break;35         }36         if(!s.empty()) f=false;   //判断是否栈空37         if(f)38             cout<<"YES"<<endl;39         else40             cout<<"NO"<<endl;41     }42     return 0;43 }
View Code

 

Freecode : www.cnblogs.com/yym2013

0 0