代码解决方案生成成功,但运行不了。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#define Stack_Size 100
#define TRUE 1
#define FALSE 0
typedef char StackElementType;
typedef struct {
StackElementType elem[Stack_Size];
int top;
}SeqStack;
//初始化顺序栈
void InitStack(SeqStack* S) {
//S = (SeqStack*)malloc(sizeof(SeqStack));
S->top = -1;
}
//判满
int Judge_full(SeqStack S) {
if (S.top == (Stack_Size - 1)) {
return 1;
}
else {
return 0;
}
}
//判空
int Judge_empty(SeqStack S) {
if (S.top == -1) {
return 1;
}
else {
return 0;
}
}
//进栈
int Push(SeqStack* S, StackElementType x) {
if (S->top == Stack_Size - 1) return FALSE;
S->top++;
S->elem[S->top] = x;
return TRUE;
}
//出栈
int Pop(SeqStack* S, StackElementType* x) {
if (S->top == -1) {
return FALSE;
}
else {
*x = S->elem[S->top];
S->top--;
return TRUE;
}
}
//读栈顶元素
int GetTop(SeqStack S, StackElementType* x) {
if (S.top == -1) {
return FALSE;
}
else {
*x = S.elem[S.top];
return TRUE;
}
}
//判断
void Judge(int result) {
if (result == 1) {
printf("成功!\n");
}
else {
printf("失败!\n");
}
}
//字符判断
int Match(char a, char b) {
if (strcmp(&a, &b) == 0) {
return 1;
}
else {
return 0;
}
}
void BracketMatch(char* str) {
SeqStack S;
int i;
char ch;
InitStack(&S);
for (i = 0; str[i] != '\0'; i++) {
switch (str[i]) {
case '(':
case '[':
case '{':
Push(&S, str[i]);
break;
case ')':
case']':
case'}':
if (Judge_empty(S)) {
printf("\n右括号多余!");
return;
}
else {
GetTop(S, &ch);
if (Match(ch, str[i]))
Pop(&S, &ch);
else {
printf("\n对应的左右括号不同类!");
return;
}
}
}
}
if (Judge_empty(S)) {
printf("\n括号匹配!");
}
else {
printf("\n左括号多余!");
}
}
int main() {
char str[Stack_Size];
printf("请输入字符串:");
scanf_s("%s", &str);
BracketMatch(str);
return 0;
}