主题:[讨论]括号匹配为什么错了呢
主程序如下:为什么我输入的括号无论是否匹配...他的输出结果却总是匹配呢...请大家帮我看看那里出了问题了呢.....struct SqStack
{
int *base; // 在栈构造之前和销毁之后,base的值为NULL
int *top; // 栈顶指针
int stacksize; // 当前已分配的存储空间,以元素为单位
}; // 顺序栈
上面为我的栈的格式......
下面为判断是否匹配的函数
void bracketmatch()
{ //判断括号是否为空的函数
SqStack s;
int i=0;
char x;
int tag=1;//括号是否匹配的标志,如果为1则说明匹配,为0则说明不匹配
char array1[maxsize];
InitStack(s); // 初始化栈
printf("请输入括号,注意只能输入圆括号和方括号:");//输入
scanf("%s",array1);
for(i=0;array1[i]!='\0';i++){printf("%c",array1[i]);}
for(i=0;array1[i]!='\0'&&(tag!=1);i++){//遍历输入的所有字符的循环
if (array1[i]=='('||array1[i]=='['){//如果是左圆括号或者是左方括号,则直接压入栈中
Push(s,array1[i]);
}
if(array1[i]==')'){//如果是右圆括号,则取出栈顶元素,判断栈顶元素是否为左圆括号
Pop(s,x);
if(x!='(')
tag=0;//如果不是则说明不匹配
}
if (array1[i]==']'){//如果是右方括号,则取出栈顶元素,判断栈顶元素是否为左方括号
Pop(s,x);
if(x!='[')
tag=0;//如果不是则说明不匹配
}
}
if (StackEmpty(s)&&(tag==1))//如果栈已经空了并且括号匹配的标志的值为1,则说明括号匹配
printf("括号匹配正确\n");
else
printf("括号匹配不正确\n");//否则括号不匹配
}//判断括号匹配的函数结束
{
int *base; // 在栈构造之前和销毁之后,base的值为NULL
int *top; // 栈顶指针
int stacksize; // 当前已分配的存储空间,以元素为单位
}; // 顺序栈
上面为我的栈的格式......
下面为判断是否匹配的函数
void bracketmatch()
{ //判断括号是否为空的函数
SqStack s;
int i=0;
char x;
int tag=1;//括号是否匹配的标志,如果为1则说明匹配,为0则说明不匹配
char array1[maxsize];
InitStack(s); // 初始化栈
printf("请输入括号,注意只能输入圆括号和方括号:");//输入
scanf("%s",array1);
for(i=0;array1[i]!='\0';i++){printf("%c",array1[i]);}
for(i=0;array1[i]!='\0'&&(tag!=1);i++){//遍历输入的所有字符的循环
if (array1[i]=='('||array1[i]=='['){//如果是左圆括号或者是左方括号,则直接压入栈中
Push(s,array1[i]);
}
if(array1[i]==')'){//如果是右圆括号,则取出栈顶元素,判断栈顶元素是否为左圆括号
Pop(s,x);
if(x!='(')
tag=0;//如果不是则说明不匹配
}
if (array1[i]==']'){//如果是右方括号,则取出栈顶元素,判断栈顶元素是否为左方括号
Pop(s,x);
if(x!='[')
tag=0;//如果不是则说明不匹配
}
}
if (StackEmpty(s)&&(tag==1))//如果栈已经空了并且括号匹配的标志的值为1,则说明括号匹配
printf("括号匹配正确\n");
else
printf("括号匹配不正确\n");//否则括号不匹配
}//判断括号匹配的函数结束