/*
从键盘上输入一串括号组成的字符串,试编写一个算法,
判断所输入的括号是否匹配,如匹配输出1否则输出0
*/
# include <iostream>
# include <stdlib.h>
# include <stdio.h>
using namespace std;
const int maxn = 1000 + 10;
typedef struct Stack
{
char *base;
char *top;
int stacksize;
}sqstack;
void createsqstack(sqstack &s)
{
s.base = (char*) malloc (maxn * sizeof(char));
s.top = s.base;
s.stacksize = maxn;
}
void push(sqstack &s, char ch)//入栈
{
if(s.top - s.base >= maxn)
{
printf("该栈已满。\n");
}
*s.top++ = ch;
}
char pop(sqstack &s)//出栈
{
if(s.top == s.base)
{
return '#';
//printf("该栈已空。");
}
return *--s.top;
}
char gettop(sqstack &s)//取栈顶元素
{
if(s.top == s.base)
//printf("该栈已空。");
return '#';
return *(s.top - 1);
}
bool match(sqstack &s, char* str)
{
push(s, str[0]);//将数组第一个元素压栈
for(int i = 1; i<strlen(str); i++)
{
char flag = gettop(s);//取栈顶元素
switch(flag)
{
case'(':
if(str[i] == ')')
pop(s);
else
push(s, str[i]);
break;
case'[':
if(str[i] == ']')
pop(s);
else
push(s, str[i]);
break;
case'#':
if(str[i] == '(' || str[i] == '[')
push(s, str[i]);
break;
default:
break;
}
}
if(s.base == s.top)
return true;
else
return false;
}
int main()
{
Stack s;
//int n;
//char ch;
char str[100];
printf("请输入字符串:\n");
scanf("%s", str);
createsqstack(s);
bool conclusion = match(s, str);
if(conclusion == true)
printf("1\n");
else
printf("0\n");
return 0;
}