主要思路:
- 主要是借助栈对括号进行匹配,遍历整个字符串,若为左括号,则入栈;若为右括号,则判断栈是否为空,以及栈顶元素与当前元素是否匹配;
- 要特别注意每个字符串的遍历结束的条件。
/*-------------------------------------------------------
功能:可进行括号匹配,输入可包括{}, [], (), 其他任意字符
输入示例:
3
{
{
{
{
{
{
{[[[[[1314]]]]]}}}}}}}
{
{
{
{
{[[[(())]}}}}}
((({
{
{
{
{[[521]]}}}}})))
输出示例:
Yes
No
Yes
Author: Zhang Kaizhou
Date:2019-3-6 14:59:06
--------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 1000
typedef struct node{ // 定义一个结点数据类型用于存放每行结果
char res[10];
struct node * pnext;
} Node;
typedef struct{ // 定义一个栈数据类型,用于符号判断
char oper[MAXSIZE];
int top;
} OperStack;
void judge_blanket_match(char * str, Node * p);
void push_oper(OperStack * p_oper, char ch);
void pop_oper(OperSt