您的位置:首页 > 编程语言

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

2017-05-31 17:26 411 查看
写一个方法。如何验证代码中文件中的括号(大括号、中括号、小括号) 是否匹配,如果匹配输出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;
}

结果



不知道为什么,总感觉写的不尽人意。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法