数据结构与算法分析c++:栈的应用(2)
来源:互联网 发布:linux svn服务器配置 编辑:程序博客网 时间:2024/05/16 12:15
括号匹配
检测括号匹配是比较常见的功能需求,比如编写代码时,往往因为多了一个括号(当然少了也不行),编程工具,例如vs,会提示大批量的错误,这时我们往往找到对应缺失的括号添加或去除就可以了。利用栈就可以很高效的实现这一功能。我们仅就圆括号、方括号、花括号的检测为例进行简要的阐述。
算法原理阐述
做一个空栈。读入字符知道字符串尾部。如果字符是一个开放字符(“(”、“[”、“{”),入栈;如果字符是一个封闭字符(“)”、“]”、“}”),若栈为空,则报错,若栈非空,则判断栈顶的开放字符是否和该封闭字符对应,若对应,则弹出栈顶元素,若不对应,则报错。字符串处理完毕后检测栈的情况,若非空则报错。
下面依照算法原理的阐述,编写代码。
#include <iostream> #include <stack>#include <string>using namespace std;bool paren(const string expression) { stack<char> s; for (int i = 0; i < expression.length(); i++) { if (expression.at(i) == '(' || expression.at(i) == '{' || expression.at(i) == '[') { s.push(expression.at(i)); } else if (expression.at(i) == ')' || expression.at(i) == '}' || expression.at(i) == ']') { if (s.empty()) { return false; } else{ switch (expression.at(i)) { case ')': if (s.top() != '(') { return false; } else{ s.pop(); break; } case '}': if (s.top() != '{') { return false; } else{ s.pop(); break; } case ']': if (s.top() != '[') { return false; } else{ s.pop(); break; } default: return false; } } } } return s.empty();}
代码测试。
int main(int argc, char* argv[]){ cout << "input expression" << endl; //string line; //cin >> line; string line; getline(cin, line); if (paren(line)) { cout << "parens in expression are matched..." << endl; } else { cout << "parens in expression are not matched..." << endl; } system("pause"); return 0;}
关于测试代码,字符串的读入有很多方式,
string line; cin >> line;
这种方式无法读入带空格的字符串;
string line; getline(cin, line);
这种方式可以读取一行,以回车符为结束符;
当然还有很多方式,比如读段落等,有人这样实现,
string s; int n; cin>>n; cin.ignore(); for(int i=0;i<n;i++) { getline(cin,s); cout<<s<<endl; }
但是需要确定n的大小,固定了行数,这不是我们期望的。
方式有很多,小伙伴可以根据自己需要进行编写,当然这不属于本文的讨论内容,有兴趣的小伙伴可以自己多研究研究。下面看一下结果。
阅读全文
0 0
- 数据结构与算法分析c++:栈的应用(2)
- 数据结构与算法分析c++:栈的应用(1)
- 数据结构与算法分析c++:栈的应用(3)
- 栈及其应用 - C语言实现(摘自数据结构与算法分析 C语言描述)
- 栈及其应用 - C语言实现(摘自数据结构与算法分析 C语言描述)
- [数据结构与算法分析]栈的应用-学习笔记
- 数据结构与算法分析(C)1.4
- 数据结构与算法分析c++:算法分析
- 数据结构与算法分析c++:算法分析
- 《数据结构与算法分析》—栈的链表和数组实现(C语言)
- Java数据结构与算法分析《七》递归的高级应用
- (c#)数据结构与算法分析 --栈与队列
- 数据结构与算法分析-栈的实现
- 由《数据结构与算法分析-C语言描述》开始的数据结构与算法学习之旅
- 数据结构与算法分析 C语言描述 单链表的实现
- 数据结构与算法(7)— 栈的应用
- 数据结构(c++)(2)--栈的应用
- 数据结构,算法与应用(2)
- 小心!用户模型正在悄悄毁灭你的产品
- 这21条几乎概括了运营人存在的所有问题,很多人看后都恍然大悟!
- Ext事件机制学习
- Unity 与 ARkit 开发-基础篇
- Probability UVA
- 数据结构与算法分析c++:栈的应用(2)
- 没有经验想转产品,吃顿火锅就知道怎么做了
- 基于Solr的Hbase二级索引
- MyBatis中#{}和${}的区别详解
- 性、谎言和灰产:社交软件不社交,后来者如何破局?
- 设计模式六大原则(2):里氏替换原则
- Android APP登录界面
- [喵咪BELK实战(3)] logstash+filebeat搭建
- Tensorflow学习--Classification 分类