问题:
括号匹配问题
思路:
- 给存放括号的字符数组,传进括号匹配函数中。
- 从而对这个数组进行遍历,当识别到左括号类型的字符时,给其移到栈中push(w,s[i]),当识别到右括号类型的字符时,与左括号进行配对;
- 右括号配对时,分为四种情况
- 当存放左括号类型的栈为空时,没有与有括号匹配的,直接返回false,失败;
- 当我定义一个字符变量,进行出栈操作,用来存放弹出栈的元素时,其与右括号不匹配,即我遍历的‘}’而弹出来的!='{',则失败,另外两个情况也是如此。
当for循环结束时,再次检测栈内情况,若为空,即遍历时没有发生报错,此时为正常结束,匹配成功。
代码如下:(内有出栈操作,入栈操作,初始化栈,以及定义一个栈)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//创建栈
typedef struct
{
char data[50];
int top;
}SqStack;
void InitStack(SqStack *s)
{
s->top=-1;
}
//入栈
void StackPush(SqStack *s,char x)
{
s->top++;
s->data[s->top]=x;
}
//出栈
void StackPop(SqStack *s,char *e)
{
if(s->top == -1)
{
printf("栈都空了,没东西了\n");
exit(-1);
}
*e =s->data[s->top];
s->top--;
}
void KuohaoMatch(char *num,int len)
{
SqStack s;
InitStack(&s);
int i;
for(i=0;i<len;i++)
{
if(num[i]=='(' || num[i]=='[' || num[i]== '{')
StackPush(&s,num[i]);
else
{
if(s.top== -1)
{
printf("栈内没有匹配的括号,匹配失败\n");
exit(-1);
}
char e='a';
StackPop(&s,&e);
if(num[i]=='}' && e != '{')
{
printf("}匹配失败\n");
exit(-1);
}
if(num[i]==']' && e != '[')
{
printf("]匹配失败\n");
exit(-1);
}
if(num[i]==')' && e != '(')
{
printf(")匹配失败\n");
exit(-1);
}
}
}
if(s.top==-1)
printf("匹配完毕,未发现异常,匹配成功\n");
else
printf("栈内仍有括号,匹配失败\n");
}
int main()
{
char num[10]="{([])}";
int len=strlen(num);
KuohaoMatch(num,len);
return 0;
}