zoukankan      html  css  js  c++  java
  • 括号匹配为题(栈的思想)哈

    数据结构实验之栈四:括号匹配

     

    Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

    题目描述

     给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。

    输入

     输入数据有多组,处理到文件结束。

    输出

     如果匹配就输出“yes”,不匹配输出“no”

    示例输入

    sin(20+10)
    {[}]

    示例输出

    yes
    no

    提示

       我的分析:运用栈的思想,读到左边的括号,就把它推进栈里面去,如果遇到的是右边的括号,就让当前读到的括号和栈顶的元素括号进行匹配。

                     如果匹配的上,就将栈的数字指针往后移一位(理论上应该将栈顶元素出栈,介于我的技术,我利用的是指针移位)。如果没有匹配上,

                    直接跳出循环,printf("no ");

    #include <stdio.h>
    #include <string.h>
    
    char s[100], e=0;
    
    void main()
    {
        int i, f;
        int len;
        char a[100];
        while(gets(a)!=NULL)
        {
            f = 1;
            e = 0;
            len = strlen(a);
            for(i=0; i<len; i++)
            {
                if(a[i]=='{' || a[i]=='[' || a[i]=='(')
                {
                    s[e++] = a[i];
                }
                if(a[i]==')')
                {
                    if(e==0)
                    {
                        f=0;
                        break;
                    }
                    if(e>0 && s[e-1]=='(')
                    {
                        e = e-1;
                    }
                    else if(e>0 && s[e-1]!='(')
                    {
                        f=0;
                        break;
                    }
                }
                if(a[i]==']')
                {
                    if(e==0)
                    {
                        f=0;
                        break;
                    }
                    if(e>0 && s[e-1]=='[')
                    {
                        e = e-1;
                    }
                    else if(e>0 && s[e-1]!='[')
                    {
                        f=0;
                        break;
                    }
                }
                if(a[i]=='}')
                {
                    if(e==0)
                    {
                        f=0;
                        break;
                    }
                    if(e>0 && s[e-1]=='{')
                    {
                        e = e-1;
                    }
                    else if(e>0 && s[e-1]!='{')
                    {
                        f=0;
                        break;
                    }
                }
            }
            if(f==0 || e>0)
                printf("no
    ");
            else if(e==0)
                printf("yes
    ");
        }
    }
  • 相关阅读:
    Discuz!X3.2 uc_server密码正确无法登录的解决方法
    手动添加uc应用及其 提示notelist表缺少appX字段的处理方法
    discuz 3 头像显示不成功
    用户名称修改的完美解决方法
    WEB服务器、应用程序服务器、HTTP服务器区别
    小议函数指针
    Difference Between objectForKey and valueForKey in NSDictionary
    valueforkey objectforkey区别,
    budle identifier,
    return,hiding 之前,
  • 原文地址:https://www.cnblogs.com/yspworld/p/3789834.html
Copyright © 2011-2022 走看看