ezLeo 2015-06-20 02:05 采纳率: 0%
浏览 2745
已结题

c语言栈的平衡符号的问题

本人新手+小白一枚
这段程序看了n个小时修改改了很多次还是木有得到真谛,关键就在于check函数判断封闭符号是否和开放鼓号相匹配,一直也没有调试好,请教大神给我指点一下
int
CheckSymbol(Stack S,char str[])
{
int i,j;
for(i=0;i<10;i++)
{
if(str[i]=='{'||str[i]=='('||str[i]=='[')
{
Push(str[i],S);//如果是开放符号则压入栈

      for(j=i;j<10;j++)

      {
          if(str[j]=='}'&&S->Array[S->TopOfStack]=='{'||str[j]==')'&&S->Array[S->TopOfStack]=='('||str[j]==']'&&S->Array[S->TopOfStack]=='[')
      {
          return 0;
          Pop(S);//如果匹配则返回0并且弹出
      }
      else 
         return 1;
      }
  }
  else 
      return 1;
}       

  }

main()
{
char str[10]="1[23";
Stack S;

if(CheckSymbol(S,str)==0)
printf("match");
if(CheckSymbol(S,str)==1)
printf("no match");
}

  • 写回答

4条回答

  • bullzerone 2015-06-20 05:41
    关注

    这个是栈常见应用之一。
    如果遇到括号左边,就入栈,如果是右边,就出栈,最后如果栈为空,说明匹配成功,否则不成功。
    下面是我自己写的一个简单测试代码,实现一个括号匹配函数。其中栈我是用字符数组实现的一个简单序列栈。没给出栈代码,你看你自己栈的实现。

    void Match(char* a,int size)
    {

    int i;
    for(i=0;i<size;i++)
    {
        if(a[i]=='('||a[i]=='['||a[i]=='{')//如果是括号左边
        {
            pushstack(a[i]);//入栈
        }
        else if(a[i]==')'||a[i]==']'||a[i]=='}')//如果是括号右边
        {
            popstack();//出栈
        }
    }
    if(emptystack())//如果栈为空
    printf("success\n");//匹配成功
    else//如果不为空
    printf("not match\n");//匹配不成功
    

    }

    评论

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名