目录:

  • 代码:
  • 分析:
  • 汇编:

代码:

LinkList.h
LinkList.c
LinkStack.h
LinkStack.c
栈-线性表

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));//将该字符地址添加进栈}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;//退出查找字符串剩下字符  只要一对符号不正确使用就不用再查找剩下的字符}}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);getchar();return 0;
}

分析:






汇编:











栈应用_检测成对符号是否正确使用(代码、分析、汇编)相关推荐

  1. c语言栈中符号 的作用是什么,C语言数据结构----栈的应用(程序的符号匹配检测)...

    本节主要讲利用栈来实现一个程序中的成对出现的符号的检测,完成一个类似编译器的符号检测的功能,采用的是链式栈. 一.问题的提出以及解决方法 1.假定有下面一段程序: #include #include ...

  2. c++调用栈库函数_大华 | C/C++ 校招笔试题

    作者 | 鲜枣 大华,全球领先的以视频为核心的智慧物联网解决方案提供商和运营服务商.试题来自牛客网. 一 静态局部变量存储在进程的(). A  栈区 B  寄存器区 C  代码区 D  全局区 答案: ...

  3. c++数据结构队列栈尸体_数据结构-栈与队列(二)

    1.设有编号为1,2,3,4 的四辆列车,顺序进入一个栈式结构的站台,如图3.90所示.具体写出这四辆列车开出车站的所有可能的顺序,设栈容量为2. 1234 1243 1324 1342 2134 2 ...

  4. led伏安特性实验误差分析_检测实验室误差分析知识汇编

    2019-12-20 09:56:10 来源: 检测实验室误差分析知识汇编-检测家 第一部分 误差理论简介 在日常检测工作中,我们虽然有最好的检验方法.有检定合格的仪器设备.有满足检验要求的环境条件和 ...

  5. Vim的使用技巧-自动闭合成对符号

    (,",',[符号的自动闭合 我们可以用简单的键映射来实现以上这些成对符号的闭合,也就是在插入模式下输入这些符号的左边部分,键映射将自动完成右边部分,并保持插入模式,光标保持在成对符号的当中 ...

  6. java 栈 先进后出_栈先进后出,堆先进先出

    1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2. 栈的优势是,存取速度比堆要快,仅次于直接位于C ...

  7. c++ int自动转换成无符号变量产生的问题

    c++ int自动转换成无符号变量产生的问题 无符号对象不会小于零,尽管我们不会故意给无符号对象赋一个负值,但可能写出这样的代码. 1.当一个算数表达式中既有无符号数又有int值时,那个int值就会转 ...

  8. 通达信标记符号_通达信各种符号

    囧⊙●○⊕◎Θ⊙¤㈱㊣★☆♀◆◇◣◢◥▲▼△▽⊿◤ ◥ ▂ ▃ ▄ ▅ ▆ ▇ █ █ ■ ▓ 回 □ 〓≡ ╝╚╔ ╗╬ ═ ╓ ╩ ┠ ┨┯ ┷┏ ┓┗ ┛┳⊥﹃﹄┌ ┐└ ┘∟「」↑↓→←↘↙♀ ...

  9. Python基础详解(十三):(视频符号化)将视频转换成ASCII符号形式展示出来

    目录 一. 前言 二. 项目简介 三. 基本要求 四. 代码实现 4.1 安装ffmpeg.exe 4.2 安装you-get库 4.2.1 下载 4.2.2 检查视频信息 4.2.3 下载 mp3 ...

最新文章

  1. 使用多线程还是用IO复用select/epoll? epoll 或者 kqueue 的原理是什么?
  2. java中batch基础_详解Spring batch 入门学习教程(附源码)
  3. SpringBoot @Async Example
  4. Project Euler 1-25
  5. ASP.NET验证码C#
  6. 基于deep learning的快速图像检索(Deep Learning of Binary Hash Codes for Fast Image Retrieval)
  7. apache文件服务器加权限,apache2运行权限设置
  8. AtomicLong和LongAdder的区别
  9. 牛客挑战赛48C-铬合金之声【Prufer序列】
  10. mysql 1千万 like优化_MYSQL千万级数据量的优化方法积累
  11. 利用ping/ipconfig/nslookup/dig/whois简单工具测试DNS
  12. 《 ATSS:Adaptive Training Sample Selection》
  13. c语言换行后多空格,关于文件操作,碰到空格就换行
  14. SprngBoot引用外部jar包和本身日志接口冲突问题解决办法
  15. 鸿蒙可能超越安卓吗,华为鸿蒙能超越安卓吗?或一统江湖?任正非已志在必得...
  16. Python判断指定日期是不是法定节假日
  17. android 5.1拍照后图片镜像处理
  18. 中国计算机学会2022年度CCF会士名单公布 阿里云李飞飞等9位当选
  19. 转:DSP28335使用FIFO的串口中断总结
  20. iOS 生成自定义位数随机数

热门文章

  1. java支付管理有源码_java支付宝支付案例源码
  2. mysql怎么给表设置查询语句_MySQL查询语句简单操作示例
  3. 蓝点linux_新闻速读 gt; Windows 10 的 Linux 内核将像驱动程序一样由微软更新服务进行更新 | Linux 中国...
  4. http请求post,返回excel文件,并接收
  5. 原生js、jQuery实现选项卡功能
  6. 赞!15个来自 CodePen 的酷炫 CSS 动画效果
  7. 【干货】十分钟读懂浏览器渲染流程
  8. gulp webpack整合
  9. option标签selected=selected属性失效的问题
  10. 布局中常见的居中问题