最近在学习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 ");/*栈为空则说明全部能够匹配*/ 33 else printf("NO "); /*否则不能够匹配*/ 34 } 35 return 0; 36 }