输入一个字符串表达式,判断括号匹配
例如:{}{}{}【】【】(){【】} 匹配
{【{】}} 不匹配
使用堆栈实现,源码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
//typedef char* PCHAR;
#define STACK_SIZE 100
int top = -1;
void inistack(PCHAR& s)
{
// char* s;
s=(char*)malloc(STACK_SIZE);
memset(s,'/0',STACK_SIZE);
// return s;
}
void destorystack(PCHAR& s)
{
free(s);
}
void push(char* s,char e)
{
//top++;
if (top == STACK_SIZE-1)
{
s = (char*)realloc(s,STACK_SIZE*2);
}
top++;
s[top] = e;
}
char pop(char* s)
{
char c=s[top];
top--;
return c;
}
BOOL isEmpty()
{
return top == -1;
}
int scaleMah(const char* a)
{
int sizes = strlen(a);
int i=0;
char c='d';
char* s=&c;
inistack(s);
char zhan[100] = {0};
int j=0;
for (i=0;i<sizes;i++)
{
switch (a[i])
{
case '(':
case '[':
case '{':
{
push(s,a[i]);
break;
}
case ')':
{
if(isEmpty()) return 0;
if(pop(s) != '(') return 0;
break;
}
case ']':
{
if(isEmpty()) return 0;
if(pop(s) != '[') return 0;
break;
}
case '}':
{
if(isEmpty()) return 0;
if(pop(s) != '{') return 0;
printf("/n");
break;
}
}
}
destorystack(s);
if(!isEmpty()) return 0;
else return 1;
}
int main()
{
printf("please input /n/n");
char a[100] = {0};
scanf("%s",a);
int r = scaleMah(a);
if (r == 0)
{
printf("not mach/n");
}
else printf("mached!/n");
return 0;
}