回 帖 发 新 帖 刷新版面

主题:[讨论]括号匹配为什么错了呢

主程序如下:为什么我输入的括号无论是否匹配...他的输出结果却总是匹配呢...请大家帮我看看那里出了问题了呢.....struct SqStack
 {
   int *base; // 在栈构造之前和销毁之后,base的值为NULL
   int *top; // 栈顶指针
   int stacksize; // 当前已分配的存储空间,以元素为单位
 }; // 顺序栈
上面为我的栈的格式......
下面为判断是否匹配的函数

void bracketmatch()
 { //判断括号是否为空的函数
   SqStack s;
   int i=0;
   char x;
   int tag=1;//括号是否匹配的标志,如果为1则说明匹配,为0则说明不匹配
   char array1[maxsize];
   InitStack(s); // 初始化栈
   printf("请输入括号,注意只能输入圆括号和方括号:");//输入
  scanf("%s",array1); 
  for(i=0;array1[i]!='\0';i++){printf("%c",array1[i]);}
   for(i=0;array1[i]!='\0'&&(tag!=1);i++){//遍历输入的所有字符的循环
       if (array1[i]=='('||array1[i]=='['){//如果是左圆括号或者是左方括号,则直接压入栈中
                   Push(s,array1[i]); 
       }
       if(array1[i]==')'){//如果是右圆括号,则取出栈顶元素,判断栈顶元素是否为左圆括号
           Pop(s,x);
           if(x!='(')
               tag=0;//如果不是则说明不匹配
       }
       if (array1[i]==']'){//如果是右方括号,则取出栈顶元素,判断栈顶元素是否为左方括号
           Pop(s,x);
           if(x!='[')
               tag=0;//如果不是则说明不匹配
       }
   }
  if (StackEmpty(s)&&(tag==1))//如果栈已经空了并且括号匹配的标志的值为1,则说明括号匹配
      printf("括号匹配正确\n");
  else 
      printf("括号匹配不正确\n");//否则括号不匹配
}//判断括号匹配的函数结束

回复列表 (共1个回复)

沙发


你看看你求匹配时的小循环:for(i=0;array1[i]!='\0'&&(tag!=1);i++)
tag本来就被赋值了1,所以根本不会进入此循环。不管输入什么,栈总为空,
tag仍等于1,总是显示匹配的!
注意这种小问题哦.

我来回复

您尚未登录,请登录后再回复。点此登录或注册