马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
#define MaxSize 50
typedef struct{
char data[MaxSize];
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[S.top--];
return true;
}
bool bracketCheck (char str[], int length){
SqStack S; //建一个顺序栈
S.top = -1; //初始化栈
for (int i = 0; i < length; i++){ //搜索这个数组中每个元素
if(str[i] == '(' || str[i] == '[' || str[i] == '{'){ //如果发现左括号就压入栈中
Push (S,str[i]);
}
//发现右括号
else if(str[i] == ')' || str[i] == ']' || str[i] == '}'){
if (S.top == -1){ //如果栈为空则匹配失败
printf ("右括号多了\n");
return false;
}
char temp;
Pop (S,temp); //弹出当前栈顶元素,和发现的右括号对比
if (str[i] == ')' && temp != '(')
printf ("这个')'有问题\n");
return false;
if (str[i] == ']' && temp != '[')
printf ("这个']'有问题\n");
return false;
if (str[i] == '}' && temp != '{')
printf ("这个'}'有问题\n");
return false;
}
}
if (S.top == -1){ //如果搜索完毕,栈为空,则匹配成功,否则匹配失败
printf ("你输入的括号没毛病\n");
return true;
}
else{
printf ("左括号多了\n");
return false;
}
}
int main(){
char str[1000];
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[i] == '(' || str[i] == '[' || str[i] == '{'){ //如果发现左括号就压入栈中
Push (S,str[i]);
}
//发现右括号
else if(str[i] == ')' || str[i] == ']' || str[i] == '}'){
if (S.top == -1){ //如果栈为空则匹配失败
printf ("右括号多了\n");
return false;
}
char temp;
Pop (S,temp); //弹出当前栈顶元素,和发现的右括号对比
if (str[i] == ')' && temp != '(')
printf ("这个')'有问题\n"); //这里的大括号呢!!!!!
return false; //每次到这边就直接return出去了!!!!!把你这几个判断的大括号加上!!!!
if (str[i] == ']' && temp != '[')
printf ("这个']'有问题\n");
return false;
if (str[i] == '}' && temp != '{')
printf ("这个'}'有问题\n");
return false;
}
}
if (S.top == -1){ //如果搜索完毕,栈为空,则匹配成功,否则匹配失败
printf ("你输入的括号没毛病\n");
return true;
}
else{
printf ("左括号多了\n");
return false;
}
}
|