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");//匹配不成功
    

    }

    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题