如何验证代码中文件中的括号是否匹配

写一个方法。如何验证代码中文件中的括号(大括号、中括号、小括号) 是否匹配,如果匹配输出0,不然输出1


思路

这是算法招聘中总考的题目,其实也非常的简单,使用出栈入栈平衡即可。


实现

代码如下

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BOOLEAN char
#define TRUE 1
#define FALSE 0

BOOLEAN BracketMatch(FILE *);

// 文件路径
char *filePath = "D:\\main.c";

// 栈数组 bracket[0] 大括号 bracket[1] 中括号 bracket[2] 小括号
int bracket[3] = {0};
void pop(int key);
void push(int key);

int main()
{
    FILE *fi = fopen(filePath,"r");

    if(fi == NULL){
        printf("open file %s failed!\n",filePath);
        exit(1);
    }

    if(BracketMatch(fi) == TRUE){
        printf("匹配成功");
    }else{
        printf("匹配失败");
    }

    fclose(fi);
    return 0;
}

BOOLEAN BracketMatch(FILE *file)
{
    BOOLEAN  result;
    int str,i;
    while((str = fgetc(file)) != EOF){
        switch(str){
        case '{':
            push(0);
            break;
        case '}':
            pop(0);
            break;
        case '[':
            push(1);
            break;
        case ']':
            pop(1);
            break;
        case '(':
            push(2);
            break;
        case ')':
            pop(2);
            break;
        }
    }
    result = TRUE;
    for(i=0;i<3;i++){
        if(bracket[i] != 0){
            result = FALSE;
            break;
        }
    }
    return result;
}

void pop(int key)
{
    if(key > 2 || key < 0){
        printf("Out of bracket");
        exit(1);
    }
    bracket[key] =  bracket[key]-1;
}

void push(int key)
{
    if(key > 2 || key < 0){
        printf("Out of bracket");
        exit(1);
    }
    bracket[key] =  bracket[key]+1;
}


结果



不知道为什么,总感觉写的不尽人意。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值