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

目录:

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

代码:

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;
}

分析:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

汇编:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Oracle 参数分类 和 参数的查看方法

Oracle数据库系统根据初始化参数文件init.ora中设置的参数来配置自身的启动&#xff0c;每个实例在启动之前&#xff0c;首先读取这些参数文件中设置的不同参数。 Oracle系统中的参数&#xff0c;根据系统使用情况可以简单分为两大类&#xff1a; 普通参数&#xff1a;也就是Or…

java 方法 示例_Java集合checkedList()方法与示例

java 方法 示例集合类checkedList()方法 (Collections Class checkedList() method) checkedList() Method is available in java.lang package. CheckedList()方法在java.lang包中可用。 checkedList() Method is used to return the typesafe view of the given List at runt…

ParameterizedTypeImpl

关于“通过反射获得泛型的参数化类型”的问题&#xff1a; 下面是张老师 通过反射获得泛型的参数化类型的一段代码import java.util.*; import java.lang.reflect.*;public class GenericalReflection { private Vector<Date> dates new Vector<Date>(); public v…

Spyder打开报错解决办法

删除C:\Users\Administrator路径下.matplotlib和.spyder-py3&#xff08;你的有可能是.spyder2或.spyder3&#xff09;这两个文件夹&#xff0c;然后再重启Spyder即可 &#xff08;本人也是查找多篇大佬博客然后最后找到的解决方法&#xff09;

ERP软件销售的方法论--SPIN销售法(SPIN Selling)

有许多人一直在做的ERP软件产品的销售&#xff0c;也接受了许多关于销售方法的培训&#xff0c;我所了解的就包括有C139&#xff0c;用友的《策略九问》等方法&#xff0c;但其实行业内早就有先驱创立了相关的销售方法&#xff0c;那就是SPIN销售法&#xff0c;之前一直都是只知…

ffmpeg - AVPacket内存问题分析(AVFrame一样的)

目录&#xff1a;1、av_packet_alloc()和av_packet_free()2、av_init_packet()的问题3、av_packet_move_ref()的问题4、av_packet_clone()的问题5、AVPacket的引用计数问题6、 AVFrame一样的1、av_packet_alloc()和av_packet_free() 源码中av_packet_unref()调用av_buffer_unre…

Java类class isSynthetic()方法及示例

类的类isSynthetic()方法 (Class class isSynthetic() method) isSynthetic() method is available in java.lang package. isSynthetic()方法在java.lang包中可用。 isSynthetic() method is used to check whether this Class is a synthetic class or not. isSynthetic()方法…

BNU OJ 第26303 题 Touchscreen Keyboard

BNU OJ第26303题Touchscreen Keyboard&#xff08;题目链接&#xff09;的解题报告。 原题如下&#xff1a; Touchscreen Keyboard Problem Description Nowadays, people do not use hardware keyboards but touchscreens. Usually, they touch on the wrong letters with the…

列表(二)

1&#xff0c;什么是列表&#xff1f; 列表由一系列按特定顺序排列的元素组成。得知列表内的元素是有序的。 在Python中&#xff0c;用方括号&#xff08;[]&#xff09;来表示列表&#xff0c;并用逗号来分隔其中的元素。 color [red,blue,black,yellow]#定义一个字符串列表…

Zigbee在.Net Micro Framework系统中的应用

Zigbee是IEEE 802.15.4协议的代名词。根据这个协议规定的技术是一种短距离、低功耗的无线通信技术。这一名称来源于蜜蜂的八字舞&#xff0c;由于蜜蜂(bee)是靠飞翔和“嗡嗡”(zig)地抖动翅膀的“舞蹈”来与同伴传递花粉所在方位信息&#xff0c;也就是说蜜蜂依靠这样的方式构成…

ffmpeg-AVFrame分配内存问题

目录&#xff1a;1、格式&#xff1a;交错式2、格式&#xff1a;平坦式3、总结&#xff1a;1、格式&#xff1a;交错式 LRLRRLRLRLRLRLRLRLR 2、格式&#xff1a;平坦式 LLLLLLRRRRRR 3、总结&#xff1a; 两种方式的内存排列在AVFrame中分配是有区别的 交错式在一个buf…

stl中map函数_map :: empty()函数以及C ++ STL中的Example

stl中map函数C STL映射:: empty() (C STL map::empty()) It is built-in function in C STL and used to check whether the map container is empty or not i.e whether its size is 0 or not? 它是C STL中的内置函数&#xff0c;用于检查地图容器是否为空&#xff0c;即其…

C#使用Dotfuscator混淆代码以及加密

C#编写的代码如果不进行一定程度的混淆和加密&#xff0c;那么是非常容易被反编译进行破解的&#xff0c;特别是对于一些商业用途的C#软件来说&#xff0c;因为盯着的人多&#xff0c;更是极易被攻破。使用Dotfuscator可以实现混淆代码、变量名修改、字符串加密等功能。 这里介…

操作列表(三)

1&#xff0c;for循环(for 变量名 in 列表名:) phone [iphone 8, xiaomi10pro, huaweiv30pro, honor20, jianguopro]#定义一个列表phone for tel in phone:print("手机的类型为&#xff1a;" tel.title())#当然这里的每个元素也可以调用title()等一些方法 print(&…

C#特性之通俗演义

首先要说的是&#xff0c;可能一些刚接触C#的朋友常常容易把属性&#xff08;Property&#xff09;跟特性&#xff08;Attribute&#xff09;弄混淆&#xff0c;其实这是两种不同的东西。属性就是面向对象思想里所说的封装在类里面的数据字段&#xff0c;其形式为&#xff1a; …

栈应用_计算按运算符优先级分布的算式(代码、分析、汇编)

目录&#xff1a;代码&#xff1a;分析&#xff1a;汇编&#xff1a;代码&#xff1a; LinkList.h LinkList.c LinkStack.h LinkStack.c 栈-线性表 main.c #include <stdio.h> #include "LinkStack.h"//该程序用栈来计算算式 /*比如&#xff1a;1*56/(5-3)…

php globals_PHP $ GLOBALS(超级全局变量),带有示例

php globalsPHP $全球 (PHP $GLOBALS) PHP $GLOBALS is the only superglobal that does not begin with an underscore (_). It is an array that stores all the global scope variables. PHP $ GLOBALS是唯一不以下划线( _ )开头的超全局变量。 它是一个存储所有全局范围变量…

安装部署项目(转自)

1 新建安装部署项目 打开VS&#xff0c;点击新建项目&#xff0c;选择&#xff1a;其他项目类型->安装与部署->安装向导(安装项目也一样)&#xff0c;然后点击确定。 2 安装向导 关闭后打开安装向导&#xff0c;点击下一步&#xff0c;或者直接点击完成。 3 开始制作…

java.lang.ClassNotFoundException: sun.jdbc.odbc.JdbcOdbcDriver

更改jdk&#xff0c;版本过高的缘故&#xff0c;更改jdk为1.7版本

kotlin 查找id_Kotlin程序查找给定范围内的素数

kotlin 查找idA prime number is a natural number that is greater than 1 and cannot be formed by multiplying two smaller natural numbers. 质数是大于1的自然数&#xff0c;不能通过将两个较小的自然数相乘而形成。 Given a range start and end, we have to print al…