⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 括号匹配 .cpp

📁 共有10个文件代码
💻 CPP
字号:
/*思想:使用一个运算符栈st,当遇到"("、"["、"{"时进栈,当遇到")"、"]"、"}"时判断栈顶是否为相应的括号。
若是,退栈继续进行,否则结束*/

#include<iostream.h>
#include<malloc.h>
#define Len 20                       //最多存放Len-1个元素
typedef char elemtype;
typedef struct sqstack        
{
	elemtype data[Len];
	int top;
}stack;

void init(stack *st)                  //初始化栈st
{
	st->top=0;
}
int push(stack *st,elemtype x)          //入栈
{
	if(st->top==Len-1)
	{
		cout<<"栈上溢"<<endl;
		return 0;
	}
	else
	{
		st->top++;
		st->data[st->top]=x;
		return 1;
	}
}
int pop(stack *st,elemtype *x)             //退栈
{
	if(st->top==0)
	{
		cout<<"栈下溢"<<endl;
		return 0;
	}
	else
	{
		*x=st->data[st->top];
		st->top--;
		return 1;
	}
}
int empty(stack *st)                    //判断栈是否为空栈
{
	if(st->top==0)                         //空时返回1
		return 1;
	else 
		return 0;
}
int correct(char *str)
{
	stack st;
	char x;
	int i,ok=1;
	init(&st);                      //初始化栈st
	for(i=0;str[i]!='\0';i++)
	{
		switch(str[i])
		{
		case '(':
			push(&st,'(');break;
		case '[':
			push(&st,'[');break;
		case '{':
			push(&st,'{');break;
		case ')':
			if(!(pop(&st,&x) && x=='('))
				ok=0;break;
		case ']':
			if(!(pop(&st,&x) && x=='['))
				ok=0;break;
		case '}':
			if(!(pop(&st,&x) && x=='{'))
				ok=0;break;
		}
		if(!ok) break;
	}
	if(empty(&st) && ok)
		return 1;
	else
		return 0;
}

void main()
{
    char *str;int a;
	str=(char *)malloc(100*sizeof(char));
	do
	{
		cout<<"请输入str:";
	    cin>>str;
	    if(correct(str))
			cout<<"表达式括号是匹配的"<<endl;
	    else
		    cout<<"表达式括号不匹配"<<endl;
		cout<<"是否要再输入表达式(1 是 or 0 否)?";
		cin>>a;
	}while(a);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -