用栈判断表达式中的括号是否配对?

给定一个表达式,用栈判断表达式中的括号是否配对,主要包括(){}[]这三种括。要c语言程序,能编译的,不要算法,请求帮助!

int matched(char* s)
{
  char stack[1024];
  int n = 0;
  while (*s)
  {
    switch (*s)
    {
      case '(': 
        if (n < 1024)stack[n++] = '(';
        else return 0;
      break;
      case '{': 
        if (n < 1024)stack[n++] = '{';
        else return 0;
      break;
      case '[': 
        if (n < 1024)stack[n++] = '[';
        else return 0;
      break;
      case '}': 
        if (n >0 && stack[--n] == '{'){}
        else return 0;
      break;
      case ')': 
        if (n >0 && stack[--n] == '('){}
        else return 0;
      break;
      case ']': 
        if (n >0 && stack[--n] == '['){}
        else return 0;
      break;
    }
    s++;
  }
  return (n == 0);
}
#define CHECK(s) printf("%s check is:%s\n", s, matched(s)?"true":"false")
int main()
{
  CHECK("(()){{}}{{}}[()]");
  CHECK("(()){{}}{{}[()]");
  CHECK("(()){{}}{{}}[()]]");
  CHECK("[((())){{}}{{}}[()]]");
  return 0;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-10
#include <stdio.h>
int main()
{
char a[20],b[20];
int t,tag = 0;
gets(a);
char *p;
p=a;
t=0;
while(*p!='\0')
{
switch(*p)
{
case '(':
b[t]='(';
t++;
break;
case '[':
b[t]='[';
t++;
break;
case '{':
b[t]='{';
t++;
break;
case ')':
if(b[t-1]=='(')
t--;
else
tag = 1;
break;
case ']':
if(b[t-1]=='[')
t--;
else
tag = 1;
break;
case '}':
if(b[t-1]=='{')
t--;
else
tag = 1;
break;
default:
break;
}
if(tag == 1)
break;
p++;
}
if(t == 0)
printf("匹配\n");
else
printf("不匹配\n");
return 0;
}

追问

非常感谢,程序看懂了,但这里b[]是不是栈啊?对栈不是很明白。
请教一下你用的是什么编译器?我初学者---

追答

我用的是vc++6.0

追问

这里b[]是不是栈啊?

追答

可以这么理解,他就是使用了栈的先进后出来匹配

本回答被提问者采纳
相似回答