|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
- }
- }
复制代码
|
|