如何验证代码中文件中的括号是否匹配
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;
}
结果
不知道为什么,总感觉写的不尽人意。
思路
这是算法招聘中总考的题目,其实也非常的简单,使用出栈入栈平衡即可。
实现
代码如下
#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;
}
结果
不知道为什么,总感觉写的不尽人意。
相关文章推荐
- 栈 实际应用1 如何使用栈来判定括号是否匹配
- 验证括号是否匹配
- c#中如何用代码验证是否电子邮件(用正则)
- tf.train.match_filenames_once如何验证文件是否正确读取?
- 如何验证远程服务器上文件是否存在
- 如何判断一个表达式中的左右括号是否匹配
- 从标准输入获取C语言代码并判断花括号是否匹配
- 输入一串字符串,其中有普通的字符与括号组成(包括‘(’、‘)’、‘[’,']'),要求验证括号是否匹配,如果匹配则输出0、否则输出1.
- 括号问题 下面的代码用于判断一个串中的括号是否匹配 所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉
- Python 使用堆栈验证C文件括号是否匹配
- C#代码通过dtd验证xml文件格式是否正确
- Python验证文件是否可读写代码分享
- 栈的基本操作及如何判断一个表达式中的左右括号是否匹配
- 验证花括号是否匹配
- 如何判断一个字符串中的括号是否匹配
- 检测某一文件括号是否匹配
- Eclipse如何更改js文件匹配括号的颜色
- 栈验证表达式中的括号是否匹配
- 编写高质量代码改善C#程序的157个建议——建议115:通过HASH来验证文件是否被篡改
- 如何验证远程服务器上文件是否存在