实现思路:
采用栈来实现括号比较,我们可以这样想,我们可以采用假设法,就是我们自己只采用左括号,先采用一个数组来存储输入的,然后采用栈来存储所需要的右括号,我还是上图吧,语言表达不清除
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Max 1000
typedef struct Stack{
char data[Max];
int size=0;
int top=-1;
};
Stack s;
char str[Max];
void createStack()
{
printf("请输入字符长度");
int m;
scanf("%d",&m);
printf("请输入带有的{,},(,),[,]括弧串:");
for(int i=0;i<m;i++){
scanf("%c",&str[i]);
}
}
char pop()
{
int j=s.size;
return s.data[--j];
}
void push(char str)
{
s.data[++s.top]=str;
s.size++;
}
void init()
{
int i=0;
while(i<strlen(str)){
switch(str[i]){
case '{':push('}');break;
case '[':push(']');break;
case '(':push(')');break;
}
i++;
}
}
void match()
{
int i=strlen(str)-1;
int m=1;
int j=s.size;
while(i>=0){
if(str[i]=='}'||str[i]==']'||str[i]==')'){
if(pop()!=str[i]){
m=0;
break;
}
j--;
}
i--;
}
if(m&&!j){
printf("恭喜你");
}else{
printf("不要生气");
}
}
int main()
{
createStack();
init();
match();
return 0;
}