描述
假设表达式中允许包含两种括号:圆括号和方括号。编写一个算法判断表达式中的括号是否正确配对。
input
由括号构成的字符串,包含”(“、”)“、”[“和”]“。
output
如果匹配输出YES,否则输出NO。
样例输入
[([][]())]
样例输出
YES
这道题的思路是遇到左括号就入栈,遇到右括号就让栈顶元素出栈匹配,若匹配成功继续,若不成功则输出NO,若将字符串扫描完毕栈不为空,则说明匹配不成功
代码如下
1 #include2 #include 3 #include 4 #include 5 using std::cin; 6 using std::cout; 7 using std::endl; 8 using std::sort; 9 10 #define N 10011 struct Stack {12 char date[N];13 int top;14 } stack;15 //栈初始化16 void init(Stack *stack) {17 stack->top=-1;18 memset(stack->date,0,sizeof(char)*N);//数据清零19 }20 21 bool isempty(Stack*stack) { //判断是否为空22 return stack->top==-1;23 }24 bool isfull(Stack*stack)//判断栈溢出25 {26 return stack->top==N-1;27 }28 int gettop(Stack*stack)//获取栈顶29 {30 return stack->date[stack->top];31 }32 void push(Stack*stack,char a)//压栈33 {34 if(isfull(stack)){35 return;36 }else{37 stack->top++;38 stack->date[stack->top]=a;39 }40 41 }42 void pop(Stack*stack)//吐43 {44 if(isempty(stack)){45 return;46 }else{47 stack->top--;48 }49 }50 bool isleft(char a){51 return (a=='(')||(a=='[');52 }53 bool isright(char a){54 return (a==']')||(a==')');55 }56 bool juge(char a,char b){57 return (a=='('&&b==')')||(a=='['&&b==']');58 }59 int main(){60 Stack stack;61 init(&stack);62 char str[100];63 cin>>str;64 int len=strlen(str);65 for(int i=0;i