描述:
假设一个表达式或一段程序中含有三种括号:圆括号“(”和“)”、方括号“[”和“]”、花括号“{”和“}”。试写一个程序判别给定的表达式或程序中所含括号是否正确配对出现。
输入说明:
每行为一个含有括号的表达式或一段程序。
输出说明:
输出一个right或wrong,表明正确匹配与否。
输入样例:
while (m<(a[8]+t) {m=m+1; t=t-1;}
输出样例:
wrong
提示
用栈来实现
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Node{
char elem[100];
int top;
}Node,*Stack;
Stack set(Stack s)
{
s->top=-1;
return s;
}
Stack push(Stack s,char ch)
{
s->top++;
s->elem[s->top]=ch;
// printf("push %c\n",s->elem);
return s;
}
char pop(Stack s)
{
char temp=NULL;
temp=s->elem[s->top];
s->top--;
// printf("pop %c stacktop %d\n",temp,s->top);
return temp;
}
int correct(char str[],Stack s)
{
int l=strlen(str);
int flag=0;
for(int i=0;i<l;i++)
{
// printf("test\n");
char temp;
if(str[i]=='('||str[i]=='['||str[i]=='{')
{
flag=1;
push(s,str[i]);
// printf("push %c\n",str[i]);
}
if(s->top>-1)
{
if((str[i]==')'||str[i]==']'||str[i]=='}'))
{
temp=pop(s);
// printf("pop %c %c\n",temp,str[i]);
if(str[i]==')'&&temp!='(')
return 0;
if(str[i]==']'&&temp!='[')
return 0;
if(str[i]=='}'&&temp!='{')
return 0;
}
}
else
{
if((str[i]==')'||str[i]==']'||str[i]=='}'))
return 0;
}
}
if(s->top==-1&&flag==1)
return 1;
else
return 0;
}
int main()
{
char s[100]={};
gets(s);
Stack S;
S=(Stack)malloc(sizeof(Node));
set(S);
if(correct(s,S))
printf("right");
else
printf("wrong");
return 0;
}