括号匹配(C++ Stack)

最近在学习C++,所以使用stack容器来实现括号匹配

 1 /**********************************************************/
 2 stack<Typet>Num;      /*定义一个Typet类型的栈*/
 3 Num.push(STR[i]);    /*入栈,把元素压入栈中*/
 4 Num.pop();           /*无返回值,弹出栈顶*/
 5 Num.top();           /*访问栈顶元素,栈不能为空,否则报错*/
 6 /**********************************************************/
 7 #include <iostream>
 8 #include <stack>
 9 #include <stdio.h>
10 #include <string.h>
11 using namespace std;
12 char STR[3000005];
13 int main()
14 {
15     int Len;
16     while(scanf("%s",STR)!=EOF) /*输入一串字符串*/
17     {
18         stack<char>Num;         /*每次定义一个栈*/
19         Len=strlen(STR);        /*求字符串长度*/      
20         for(int i=0;i<Len;i++)
21         {
22             if(!Num.empty()&&(STR[i]-Num.top()==1||STR[i]-Num.top()==2))/*当栈不为空且能够匹配时*/
23             {
24                 Num.pop();      /*出栈*/
25             }
26             else
27             {
28                 Num.push(STR[i]);        /*否则入栈*/
29                 if(STR[i]==')'||STR[i]=='}'||STR[i]==']'||STR[i]=='>')break; /*判断入栈的元素为右括号,则不需要再判断*/
30             }
31         }
32         if(Num.empty())printf("YES\n");/*栈为空则说明全部能够匹配*/
33         else printf("NO\n");           /*否则不能够匹配*/
34     }
35     return 0;
36 }
View Code

 

posted @ 2015-04-14 21:23  Wurq  阅读(438)  评论(0编辑  收藏  举报