华为机试之括号匹配

 //验证括号是否匹配 运行正确
 
 #include <stdio.h>  
    #include <stdlib.h>  
    #include <string.h>  
    #define  MAXLEN 50  
    typedef struct stack   
    {  
        char ch[50];  
        int top;  
    }ST;  
    //栈的初始化  
    ST *ST_Init()  
    {  
        ST *st;  
        if (st=(ST *)malloc(sizeof(ST)))  
        {  
            st->top=0;  
            return st;  
        }  
        return NULL;  
    }  
    //出栈操作  
    int ST_Pop(ST *st)  
    {  
        if (st->top==0)  
        {  
            printf("栈为空\n");  
            return 0;  
        }  
        st->top--;  
        return st->ch[st->top];  
    }  
      
    //入栈操作  
    void st_Push(ST *st,char c)  
    {  
        if (st->top==MAXLEN)  
        {  
            printf("栈溢出\n");  
            return ;  
        }  
        st->ch[st->top]=c;  
        st->top++;  
    }  
    //符号检验函数  
   void check_symbol(ST *st,char *a)  
    {  
        int i;  
        if (a[0]==']'||a[0]==')')
        {
            printf("输入的符号已经不可能匹配\n");
            return ;
        }
        else if (a[0]=='('||a[0]=='[')

            st_Push(st,a[0]);
        
             
        for (i=1;i<strlen(a);i++)
        {
          if ((a[i]==')'&&st->ch[st->top-1]=='(')||(a[i]==']'&&st->ch[st->top-1]=='['))
              ST_Pop(st);
          else if (a[i]=='['||a[i]==']'||a[i]=='('||a[i]==')')
              st_Push(st,a[i]);
        }
        
    
        if(st->top==0)  
        {  
            printf("括号是匹配的\n\n");  
        }  
        else  
      
        {  
            printf("括号不匹配\n\n");  
        }  
    }  
      
    void main()  
    {  
      
        while (1)  
        {  
            char s[50];  
            ST *st;  
            st=ST_Init();     
            printf("请输入一串括号:\n");  
            scanf("%s",s);  
            if(s[0]=='E')  
                return;  
            check_symbol(st,s);  
        }  
      
    } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值