#include "stdio.h"
#include "stdlib.h"
typedef struct{
int* base;
int top;
int size;
}Stack;
Stack S1;
void InitStack(Stack &S,int n);
void Push(Stack &S,char e);
char Pop(Stack &S);
bool IsEmpty(Stack S);
int main()
{
int n=0,n1=0;
char a,b;
char s[100]={'0'};
char S[100]={'0'};
a=getchar();
while(a!='\n')
{
S[n1]=a;
n1++;
a=getchar();
}
for(int i=0;i<n1;i++)
{
if(S[i]=='('||S[i]=='{'||S[i]=='['||S[i]==')'||S[i]==']'||S[i]=='}')
{
s[n]=S[i];
n++;
}
}
InitStack(S1,n);
if(s[0]==')'||s[0]==']'||s[0]=='}')
{
printf("%d",0);
return 0;
}
for(int i=0;i<n;i++)
{
if(s[i]=='('||s[i]=='{'||s[i]=='[')
{
Push(S1,s[i]);
}
else if(s[i]==')'||s[i]==']'||s[i]=='}')
{
if(!IsEmpty(S1))
{
b=Pop(S1);
if((b=='('&&s[i]==')')||(b=='['&&s[i]==']')||(b=='{'&&s[i]=='}'))
{}
else
{
printf("%d",0);
return 0;
}
}
else
{
printf("%d",0);
return 0;
}
}
}
if(IsEmpty(S1))
printf("%d",1);
else
printf("%d",0);
}
void InitStack(Stack &S,int n)
{
S.base=(int*)malloc(n*sizeof(int));
S.top=0;
S.size=n;
}
void Push(Stack &S,char e)
{
if(S.top>=S.size){
S.base=(int *)realloc(S.base,(S.size+10)*sizeof(int));
if(!S.base) exit(0);
S.size+=10;
}
S.base[S.top++]=e;
}
char Pop(Stack &S)
{
if(S.top!=0)
{
S.top--;
char e=S.base[S.top];
return e;
}
else
return 0;
}
bool IsEmpty(Stack S)
{
if(S.top==0)
return true;
else
return false;
}
题目是
假设一算术表达式中包括三种括号:圆括号'('和')'; 方括号'[' 和']'; 花括号'{' 和'}',且三种括号可按任意次序嵌套使用,试编写程序判定输入的表达式所含的括号是否正确配对出现(已知表达式已存入数据元素为字符的顺序表中)。所有括号均为半角符号。
若匹配,则返回1,否则返回0。
自己测试都是对的,但是在系统上总是运行时错误
求求各位大佬帮忙看看,今天就要截止了