圆括号匹配
来源:互联网 发布:可以听pdf的软件 编辑:程序博客网 时间:2024/06/05 06:56
问题描述:
设计一个算法判断算数表达式的圆括号是否正确匹配
算法思想:
使用栈来实现,当在输入的字符串中检测到‘(’字符时,该字符入栈。当在输入的字符串中检测到‘)’字符时,上一个字符出栈。
最后判断栈是否为空,若为空,则圆括号匹配正确,否则,圆括号匹配不正确。
需要注意的是当‘)’字符最先出现时,直接判断圆括号匹配不正确。
代码实现:
ParenthesisMatch.cpp
#include<string>#include"SeqStack.h"using namespace std;int main(){ SeqStack<char> stack1; //定义一个顺序栈对象 string s1; //定义一个串 cout<<"请输入算数表达式:"; cin>>s1; for(int i=0; i<s1.size(); i++) //依次检测每个字符 { if(s1[i]=='(') //当出现'('时,入栈 stack1.Push(s1[i]); else if(s1[i]==')' && stack1.Empty()) //当')'最先出现,直接判断圆括号不匹配 { cout<<"算数表达式圆括号不匹配!"<<endl; return 0; } else if(s1[i]==')' && !stack1.Empty()) //当出现')'且不是最先出现时,上一个字符出栈 stack1.Pop(); } if(stack1.Empty()) //栈空,则圆括号匹配正确 cout<<"算数表达式圆括号匹配!"<<endl; else //否则,圆括号匹配不正确 cout<<"算数表达式圆括号不匹配!"<<endl; return 0;}
SeqStack.h
#include<iostream>using namespace std;const int StackSize = 1024; //定义栈的最大高度template<class T>class SeqStack //定义顺序栈的模板类{ public: SeqStack(){top = -1;} //构造函数,初始化空栈 void Push(T x); //入栈操作 T Pop(); //出栈操作 T GetTop(); //获得栈顶元素 bool Empty(); //判断栈是否为空 private: T data[StackSize]; //定义数组 int top; //栈顶指针};template<class T>void SeqStack<T>::Push(T x) //入栈操作{ if(top >= StackSize-1) throw"上溢"; top++; //栈顶指针上移 data[top] = x;}template<class T>T SeqStack<T>::Pop() //出栈操作{ if(Empty()) throw"下溢"; top--; //栈顶指针下移 return data[top+1];}template<class T>T SeqStack<T>::GetTop() //查找栈顶元素{ if(Empty()) throw"下溢"; return data[top];}template<class T>bool SeqStack<T>::Empty(){ if(top==-1) return true; else return false;}
实验结果:
0 0
- 圆括号匹配
- 圆括号匹配
- 检查圆括号是否匹配
- 圆括号
- 字符串中圆括号的平衡和匹配检测
- 栈的应用——圆括号的匹配检验
- 查找C语言中的基本语法错误,如圆括号,左括号,花括号不匹配等
- [SMOJ1989]圆括号
- POJ 1068 圆括号编码
- 正则表达式中的圆括号
- create table用圆括号()
- leetcode【第三周】:输出圆括号
- Python 正则表达式 或者(|) 圆括号
- 17、ES6 圆括号的问题
- javascript匿名函数结尾处圆括号含义
- 正则表达式中的圆括号的作用
- Python 元组与圆括号使用风格
- js 两个圆括号 自调用 闭包
- HTML5中的onload事件
- ASP.NET验证控件详解
- 聚美优品、京东:为什么明知假货还有人买?
- C# WinForm基础三 socket网络编程
- 阿里云ubuntu14.04的ECS主机安装Mysql步骤
- 圆括号匹配
- 如何解决“文件上传返回JSON数据,在IE下提示下载文件”的问题?
- 解题报告 之 SOJ1678 Mountains
- Windows与Linux下伪光标的显示实现
- asp.net中修改sql server express的数据
- 第58题 Maximum Subarray
- C/C++的四大内存分区
- 数据结构之贪心算法(背包问题的思考)-(十)
- 从 Yii 1.1升级到 Yii2