C语言:用栈来检查括号的匹配
以下代码哪里出错了,如何改正?
#include<stdio.h>
#define max_size 21
typedef struct
{
char data[max_size];
int top;
}stack;
int isleft(char c){
int ret;
switch (c)
{
case '[':
case '{':
ret = 1;
break;
default:
ret = 0;
break;
}
return ret;
}
int isright(char c){
int ret;
switch (c)
{
case ']':
case '}':
ret = 1;
break;
default:
ret = 0;
break;
}
return ret;
}
int check(char left,char right){
int ret = 0;
switch (left)
{
case '[':
if (right == ']')
{
ret = 1;
}
break;
case '{':
if (right == '}')
{
ret = 1;
}
break;
default:
ret = 0;
break;
}
return ret;
}
int scanner(char *str){
stack *s;
int i = 0;
int ret = 1;
char c;
while (str[i] != '\0')
{
if (isleft(str[i]))
{
s->data[++s->top] = str[i];
}
if (isright(str[i]))
{
if (s->data[s->top] == '\0')
{
ret = 0;
return ret;
}
else
{
c = s->data[s->top];
if (check(str[i-1],c))
{
s->top--;
}else{
ret = 0;
return ret;
}
}
}
i++;
}
return ret;
}
int main(){
char str[max_size];
printf("请输入一段符号:");
fgets(str,sizeof(str)/sizeof(str[0]),stdin);
if (scanner(str) == 1)
{
printf("balance\n");
}else{
printf("no balance\n");
}
}