求求大哥们帮我看看,栈在括号匹配中的应用
#include <stdio.h>#include <stdbool.h>
#include <string.h>
#define MaxSize 50
typedef struct{
char data;
int top;
}SqStack;
bool Push (SqStack &,char);
bool Pop (SqStack &,char &);
bool bracketCheck (char str[], int length);
bool Push (SqStack &S, char e){ //入栈
if(S.top == MaxSize - 1){
return false;
}
S.data[++S.top] = e;
return true;
}
bool Pop (SqStack &S,char &e){ //出栈
if(S.top == -1){
return false;
}
e = S.data;
return true;
}
bool bracketCheck (char str[], int length){
SqStack S; //建一个顺序栈
S.top = -1; //初始化栈
for (int i = 0; i < length; i++){ //搜索这个数组中每个元素
if(str == '(' || str == '[' || str == '{'){ //如果发现左括号就压入栈中
Push (S,str);
}
//发现右括号
else if(str == ')' || str == ']' || str == '}'){
if (S.top == -1){ //如果栈为空则匹配失败
printf ("右括号多了\n");
return false;
}
char temp;
Pop (S,temp); //弹出当前栈顶元素,和发现的右括号对比
if (str == ')' && temp != '(')
printf ("这个')'有问题\n");
return false;
if (str == ']' && temp != '[')
printf ("这个']'有问题\n");
return false;
if (str == '}' && temp != '{')
printf ("这个'}'有问题\n");
return false;
}
}
if (S.top == -1){ //如果搜索完毕,栈为空,则匹配成功,否则匹配失败
printf ("你输入的括号没毛病\n");
return true;
}
else{
printf ("左括号多了\n");
return false;
}
}
int main(){
char str;
printf("请输入一串括号:\n");
scanf("%s",str);
printf("length = %d",strlen(str));
bracketCheck (str,strlen(str));
return 0;
}
这是运行结果,数组和长度都没问题,但是到这就结束了,bracketCheck里什么都不输出
请输入一串括号:
()(){}{}}{}}{
length = 13
-------------------------------- bool bracketCheck (char str[], int length){
SqStack S; //建一个顺序栈
S.top = -1; //初始化栈
for (int i = 0; i < length; i++){ //搜索这个数组中每个元素
if(str == '(' || str == '[' || str == '{'){ //如果发现左括号就压入栈中
Push (S,str);
}
//发现右括号
else if(str == ')' || str == ']' || str == '}'){
if (S.top == -1){ //如果栈为空则匹配失败
printf ("右括号多了\n");
return false;
}
char temp;
Pop (S,temp); //弹出当前栈顶元素,和发现的右括号对比
if (str == ')' && temp != '(')
printf ("这个')'有问题\n"); //这里的大括号呢!!!!!
return false; //每次到这边就直接return出去了!!!!!把你这几个判断的大括号加上!!!!
if (str == ']' && temp != '[')
printf ("这个']'有问题\n");
return false;
if (str == '}' && temp != '{')
printf ("这个'}'有问题\n");
return false;
}
}
if (S.top == -1){ //如果搜索完毕,栈为空,则匹配成功,否则匹配失败
printf ("你输入的括号没毛病\n");
return true;
}
else{
printf ("左括号多了\n");
return false;
}
} yuxijian2020 发表于 2021-4-24 01:25
哇感谢感谢!!是只有一行才可以不写括号是吗
页:
[1]