表达式括弧匹配的检测【问题描述】利用栈的基本操作,完成表达式括弧匹配的检测。(假设表达式中只有()、[]、{}三类括弧)【输入形式】输入若干个表达式(字符串形式)。(提示:使用scanf
表达式括弧匹配的检测
【问题描述】
利用栈的基本操作,完成表达式括弧匹配的检测。(假设表达式中只有()、[]、{}三类括弧)
【输入形式】
输入若干个表达式(字符串形式)。(提示:使用scanf("%s",a)==1)
【输出形式】
若表达式括弧匹配,则输出“match”;否则输出"not match"
【样例输入】
1*(3+4)/4
((3+4)*7-(8-9)
((1+2)*(3_4)-(5+6)*3)
{[}]()
【样例输出】
match
not match
match
not match
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define ERROR 0
#define OK 1
#define STACK_INT_SIZE 10
#define STACKINCREMENT 5
typedef char ElemType;
typedef struct
{
ElemType *base;
ElemType *top;
int stacksize;
} SqStack;
int initStack(SqStack *s);
int emptyStack(SqStack *s);
int pushStack(SqStack *s, ElemType e);
int popStack(SqStack *s,ElemType *e);
//初始化
int initStack(SqStack *s)
{
s->base=(ElemType*)malloc(STACK_INT_SIZE*sizeof(ElemType));
if(!s->base)
return 0;
s->top=s->base;
s->stacksize=STACK_INT_SIZE;
return 1;
}
//判断栈空
int emptyStack(SqStack *s)
{
if(s->top==s->base)
return 1;
else
return 0;
}
//入栈
int pushStack(SqStack *s, ElemType e)
{
if(s->top-s->base>=s->stacksize)
{
s->base=(ElemType*)realloc(s->base,(s->stacksize+STACKINCREMENT)*sizeof(ElemType));
if(!s->base)
return 0;
s->top=s->base+s->stacksize;
s->stacksize+=STACKINCREMENT;
}
*s->top++=e;
return 1;
}
//出栈
int popStack(SqStack *s,ElemType *e)
{
if(s->top==s->base)
return 0;
--s->top;
*e=*s->top;
return 1;
}
//判断表达式括弧匹配
int isMatching(char a[])
{
int i=0;
SqStack s;
initStack(&s);
while(a[i]!='\0')
{
if(a[i]=='('||a[i]=='['||a[i]=='{')
pushStack(&s,a[i]);
else if(a[i]==')'&&*(s.top-1)=='(')
{
popStack(&s,&a[i]);
}
else if(a[i]==']'&&*(s.top-1)=='[')
{
popStack(&s,&a[i]);
}
else if(a[i]=='}'&&*(s.top-1)=='{')
{
popStack(&s,&a[i]);
}
else if(a[i]==')'||a[i]==']'||a[i]=='}')
return 0;
i++;
}
return emptyStack(&s);
}
int main()
{
char a[1000];
//循环读取若干表达式,并输出判断结果
while(scanf("%s",a)==1)
{
if(isMatching(a))
printf("match\n");
else
printf("not match\n");
}
return 0;
}
表达式括弧匹配的检测【问题描述】利用栈的基本操作,完成表达式括弧匹配的检测。(假设表达式中只有()、[]、{}三类括弧)【输入形式】输入若干个表达式(字符串形式)。(提示:使用scanf相关推荐
- 利用栈的基本操作,将一个十进制数转换成8进制数
题目 利用栈的基本操作,将一个十进制数转换成8进制数 #include<iostream>using namespace std;#define MAXSIZE 100 typedef i ...
- 利用栈进行数制转换和括号匹配(C语言)
数制转换:将十进制数转换为任意进制数.由数制转换的计算公式 N = (N / d) × d + N % d (其中N为想转换的十进制数,d为想转换的进制) 我们可以知道其转换后的结果是逆序输出,故可以 ...
- 利用栈的基本操作,将十进制数转换为八进制数
#include <stdio.h> #include <stdlib.h> #include <malloc.h> #define STACKSIZE 100 t ...
- 栈的应用-判断表达式中括弧是否匹配(()、[]、{}三类括弧)
[问题描述] 利用栈的基本操作,完成表达式括弧匹配的检测.(假设表达式中只有().[].{}三类括弧) [输入形式] 输入若干个表达式(字符串形式).(提示:使用scanf("%s" ...
- Harris角点检测+sift描述匹配
最近用到:Harris检测图像中边缘处的特征点,并且需要两张图特征点匹配起来.Harris只是一个角点检测的算法,最终只得到特征点坐标,想要匹配需要描述,而Harris是单尺度的,自己写描述函数又有些 ...
- 括弧匹配检验:比较基础的栈
括弧匹配检验: 题目描述 假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意,如([ ]())或[([ ][ ])]等为正确的匹配,[( ])或([ ]( )或 ( ( ) ) )均为错误 ...
- 记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(二)
本文接着上一篇记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配 打开HALCON并打开匹配助手 匹配助手如图 "创建"页说明: 1,选择匹配方式 中间偏上方的下拉 ...
- 【特征匹配】BRIEF特征描述子原理及源码解析
相关:Fast原理及源码解析 Harris原理及源码解析 SIFT原理及源码解析 SURF原理及源码解析 转载请注明出处: http://blog.csdn.net/luoshixian099/art ...
- 图像兴趣点检测与描述 的深度学习方法总结
图像的兴趣点(关键点.特征点)检测和描述往往是图像配准.相机标定.场景识别.目标跟踪的首要步骤,是计算机视觉研究的重要课题.检测子的目的是为了提取可匹配的兴趣点,而描述子可用于匹配或识别,为下游任务作 ...
最新文章
- jquery判断方法是否存在_判断图中是否有环的三种方法
- 如何在 Linux 上永久挂载一个 Windows 共享
- r语言和python-r语言和python学哪个?
- 关于产品 / 市场契合点 PMF 的 12 个问题全解读(下)
- 你想带一顶什么样的硕士帽(转载)
- Python使用matplotlib设置pandas绘制的饼状图扇形标签
- xp也可以将U盘格为NTFS
- 从公司买火车票到代理模式和适配器模式
- 手模手教你装 文能黑苹果,武可3A游戏大作的2400块主机
- 第十章 VLAN间路由
- android Error obtaining UI hierarchy
- 用tensorboard可视化log日志
- OpenCV开发笔记(四十七):红胖子8分钟带你深入了解直方图(图文并茂+浅显易懂+程序源码)
- 当前佛教界的乱相之一就是以凡滥圣、惑乱人心
- wemos学习之串口通信和ESP8266wifi模块的调用
- 使用js拖拽盒子移动()
- 西瓜播放器xgplayer设置自动播放
- 【C语言】基础练习题
- 中国羊奶皂市场趋势报告、技术动态创新及市场预测
- 服务器 系统打补丁,2019服务器系统打补丁方法