栈的应用:左右符号匹配
来源:互联网 发布:matlab 三维矩阵 画图 编辑:程序博客网 时间:2024/06/06 20:51
说明:
在编译器中,都有这么一个左右符号匹配的功能,这里通过栈来模拟实现这一功能;
这里采用了代码复用的方法,即使用了LinkStack链栈,详见数据结构封装之《LinkStack链栈》;
代码:
main.c
#include <stdio.h> #include <stdlib.h> #include "LinkStack.h" //判断是否为左符号 int isLeft(char c) { int ret = 0; switch(c) { case '<': case '(': case '[': case '{': case '\'': case '\"': ret = 1; break; default: ret = 0; break; } return ret; } //判断是否为右符号 int isRight(char c) { int ret = 0; switch(c) { case '>': case ')': case ']': case '}': case '\'': case '\"': ret = 1; break; default: ret = 0; break; } return ret; } //匹配左右符号是否一对 int match(char left, char right) { int ret = 0; switch(left) { case '<': ret = (right == '>'); break; case '(': ret = (right == ')'); break; case '[': ret = (right == ']'); break; case '{': ret = (right == '}'); break; case '\'': ret = (right == '\''); break; case '\"': ret = (right == '\"'); break; default: ret = 0; break; } return ret; } //左右符号匹配逻辑 int scanner(const char* code) { LinkStack* stack = LinkStack_Create(); int ret = 0; int i = 0; while( code[i] != '\0' ) { if( isLeft(code[i]) )//左符号,则压栈 { LinkStack_Push(stack, (void*)(code + i)); }//end 1 if if( isRight(code[i]) ) { char* c = (char*)LinkStack_Pop(stack);//弹出的左符号 if( (c == NULL) || !match(*c, code[i]) )//判断弹出的左符号是否与右符号相匹配 { printf("%c does not match!\n", code[i]); ret = 0; break; } }//end 2 if i++; } if( (LinkStack_Size(stack) == 0) && (code[i] == '\0') )//栈为空时,切字符串到结尾时,则成功 { printf("Succeed!\n"); ret = 1; } else { printf("Invalid code!\n"); ret = 0; } LinkStack_Destroy(stack); return ret; } int main(int argc, char *argv[]) { const char* code = "#include <stdio.h> int main() { int a[2][5]; int (*p)[3]; p = a[0]; printf(\"%d\\n\", &p[2][3] - &a[1][3]); return 0; }"; scanner(code); return 0; }
函数结构分析:
1.isLeft
2.isRight
3.match
4.scanner
阅读全文
0 0
- 栈的应用:左右符号匹配
- 栈的应用:左右符号匹配
- 栈的应用---编译器左右符号的语法匹配
- 利用之前的链式栈实现左右符号匹配检测
- 栈的应用---编译器的符号匹配
- 数据结构-栈的应用-符号的匹配
- 栈的简单应用—-符号匹配
- 栈的符号匹配问题
- 左右括号是否匹配用的栈
- C语言数据结构----栈的应用(程序的符号匹配检测)
- python数据结构 栈的应用——符号匹配,进制转化,后缀。
- Stack的应用——符号匹配问题
- 基于栈的平衡符号匹配问题
- Valid Parentheses (栈的符号匹配)
- 栈的应用---平衡符号
- 栈的应用--平衡符号
- 栈的应用---平衡符号
- 栈的应用----平衡符号
- 打包配置问题
- UVA-253-骰子涂色
- 创建第一个Django项目(一)
- 【机器学习】卷积神经网络(CNN)架构解析
- 新手上路之oracle 92 99 表连接(笔记)
- 栈的应用:左右符号匹配
- Linux 之基本 shell 命令
- java 里面保留字volatile及其与synchronized的区别
- 将ReactiveObjC整成动态库来调用
- PAT1022~~~
- 1000. A+B Problem
- 利用AndroidStudio添加其它语言目录
- Java8系列(错误解决)--maven编译时"-source 1.5 中不支持 lambda 表达式"问题的解决
- 搭建Python开发环境时遇到问题小记