写一个方法。如何验证代码中文件中的括号(大括号、中括号、小括号) 是否匹配,如果匹配输出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;
}
结果
不知道为什么,总感觉写的不尽人意。