栈应用--括号匹配检测

//---------------------------kuohao.c------------------------------
/*
    使用方法 
    gcc kuohao.c -o kuohao
    ./kuohao name    name待检测的文件
*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

typedef char Elemtype;
#define  StackMaxSize  100
struct Stack
{
    Elemtype stack[StackMaxSize];
    int top;
};

static void init_stack(struct Stack * H)
{
    H=(struct Stack *) malloc (sizeof(struct Stack));
    if(H==NULL)
    {
        printf("malloc error/n");
        exit(-1);
    }
}

static void  push_stack(struct Stack *H, Elemtype item)
{
    if(H->top==StackMaxSize-1)
    {
        printf("Stack fully/n");
        exit(-1);
    }
    H->top++;
    H->stack[H->top]=item;
}

static Elemtype pop_stack(struct Stack *H)
{
    Elemtype e;
    if((H->top)<0)
    {
        printf("又括号太多/n");
        return -1;
    }
    e=H->stack[H->top];
    H->top--;
    return e;
}

//上面代码是用于实现栈的代码

int main(int argc, char *argv[])
{
    if(argc!=2)
    {
        printf("请输入命令名和文件明/n");
        exit(-1);
    }

    FILE *fp;
    char ch;

    struct Stack *S;
    init_stack(S);
    S->top=-1;

    fp=fopen(argv[1],"r");
   
    while((ch=getc(fp))!=EOF)
    {
        if(ch=='(' | ch=='{' | ch=='[' | ch=='<')
        {
            push_stack(S,ch);
        }
        else if(ch==')' | ch=='}' | ch==']' | ch=='>')
        {//如果是右括号,那就出栈比较吧
            switch(ch)
            {
                case ')':
                    if(pop_stack(S)!='(')
                    {
                        printf("匹配错误/n");
                        exit(-1);
                    }
                    break;
                case '}':
                    if(pop_stack(S)!='{')
                    {
                        printf("匹配错误/n");
                        exit(-1);
                    }
                    break;
                case ']':
                    if(pop_stack(S)!='[')
                    {
                        printf("匹配错误/n");
                        exit(-1);
                    }
                    break;
                case '>':
                    if(pop_stack(S)!='<')
                    {
                        printf("匹配错误/n");
                        exit(-1);
                    }
                    break;
            }
        }
        else//如果是空格,字符之类,则什么也不做
        {
        }
    }
    if(S->top!=-1)
    {
        printf("左括号太多/n");
        exit(-1);
    }
    printf("完全匹配^_^/n");
    exit(0);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
疫情居家办公系统管理系统按照操作主体分为管理员和用户。管理员的功能包括办公设备管理、部门信息管理、字典管理、公告信息管理、请假信息管理、签到信息管理、留言管理、外出报备管理、薪资管理、用户管理、公司资料管理、管理员管理。用户的功能等。该系统采用了MySQL数据库,Java语言,Spring Boot框架等技术进行编程实现。 疫情居家办公系统管理系统可以提高疫情居家办公系统信息管理问题的解决效率,优化疫情居家办公系统信息处理流程,保证疫情居家办公系统信息数据的安全,它是一个非常可靠,非常安全的应用程序。 管理员权限操作的功能包括管理公告,管理疫情居家办公系统信息,包括外出报备管理,培训管理,签到管理,薪资管理等,可以管理公告。 外出报备管理界面,管理员在外出报备管理界面中可以对界面中显示,可以对外出报备信息的外出报备状态进行查看,可以添加新的外出报备信息等。签到管理界面,管理员在签到管理界面中查看签到种类信息,签到描述信息,新增签到信息等。公告管理界面,管理员在公告管理界面中新增公告,可以删除公告。公告类型管理界面,管理员在公告类型管理界面查看公告的工作状态,可以对公告的数据进行导出,可以添加新公告的信息,可以编辑公告信息,删除公告信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值