括号匹配的程序怎么写
发布网友
发布时间:2022-05-15 06:10
我来回答
共4个回答
热心网友
时间:2023-10-11 05:59
左括号和右括号的个数相等是必要条件,但不是充分条件。
用“栈”听上去高深。
其实把依次读入的括号用左括号1右括号2表示,存入一个数组。
统计左右括号总数是否相等。不相等则不配。
loop:
再依次循环找相邻两个数是否12,是则删去,在它后面的数组元素向左移2位,如果长度变零,则是配对的,如果找不到 12,长度不为零则不配。
热心网友
时间:2023-10-11 05:59
一般括号匹配都是用栈操作完成的,基本思路是左括号入栈,碰到右括号就出栈,以栈是否非空判断是否匹配
单独的判断的话用个数相等就行
热心网友
时间:2023-10-11 06:00
用栈:
比较新入元素与栈顶元素,如果新入元素是左括号,则入栈,如果是右括号,比较是否与栈顶元素匹配,如果匹配,则删除栈顶元素,接着比较下一个新入元素与新的栈顶元素,如果不匹配,输出不匹配,到最后如果为空栈,则输出匹配.
/* algo3-3.c 括号匹配的检验,(限于()、[]) */
typedef char SElemType;
#include"c1.h"
#include"c3-1.h"
#include"bo3-1.c"
void check()
{ /* 对于输入的任意一个字符串,检验括号是否配对 */
SqStack s;
SElemType ch[80],*p,e;
if(InitStack(&s)) /* 初始化栈成功 */
{
printf("请输入表达式\n");
gets(ch);
p=ch;
while(*p) /* 没到串尾 */
switch(*p)
{
case '(':
case '[':Push(&s,*p++);
break; /* 左括号入栈,且p++ */
case ')':
case ']':if(!StackEmpty(s)) /* 栈不空 */
{
Pop(&s,&e); /* 弹出栈顶元素 */
if(*p==')'&&e!='('||*p==']'&&e!='[') /* 弹出的栈顶元素与*p不配对 */
{
printf("左右括号不配对\n");
exit(ERROR);
}
else
{
p++;
break; /* 跳出switch语句 */
}
}
else /* 栈空 */
{
printf("缺乏左括号\n");
exit(ERROR);
}
default: p++; /* 其它字符不处理,指针向后移 */
}
if(StackEmpty(s)) /* 字符串结束时栈空 */
printf("括号匹配\n");
else
printf("缺乏右括号\n");
}
}
void main()
{
check();
}
热心网友
时间:2023-10-11 06:00
貌似是