括号匹配问题与经典笔试面试题目解析 一、括号匹配问题 程序设计语言是用来编敲代码的工具。计算机硬件能够识别的语言是机器语言,通常人们编写的计算机程序所用的高级语言必须被转换成机器语言才干够被计算机理解。 将高级语言编写的源程序翻译为等价的计算机能够理解的程序的过程称为编译。而实现编译功能的程序称为编译程序。编译程序是计算机中很复杂的一种系统程序。在通常的集成开发环境中都。编译程序都是最精细、最复杂、也最重要的部分。 一个典型的编译程序一般都含有八个部分,即词法分析、语法分析、语义分析、中间代码生成、代码优化程序、目标代码生成、错误检查和处理以及各种信息表格的管理。它们相互协同配合完毕编译任务。当中在语法分析阶段,语法分析程序以词法分析程序所输出的用内部编码格式表示的单词序列作为输入。其任务是分析源程序的结构。推断它是否为对应程序设计语言中的一个合法程序。即判定程序的合法性。 本题要求编写一个程序。该程序能够对输入的一段字符串进行括号匹配检查。若语句中左括号与右括号的数目相等,且能够完整地匹配成对。即表示本语句不存在括号匹配上的错误,此时输出“OK! ”字样。否则表示语句中存在语法错误。程序输出“Wrong!”字样。显然,这是用“栈”这种数据结构来解决的一道典型问题。它的特点能够简单的概括为“后进先出”。假设把握住了这一特点。那么就是抓住了解题的关键。 以下几条语句是存在括号匹配错误的样例: )( ((()) 以下几条语句是不存在括号匹配错误的样例: () (a)((b)((c)(d))) 以下给出程序实现的源码。 #include “stdafx.h” #include <iostream> #include “LinkStack.h” using namespace std; int _tmain(int argc, _TCHAR* argv[]) { cout<<“请输入括号序列(以0结束):”; LinkStack<char> small; char a; do{ cin>>a; switch(a){ case ‘(‘:small.Push(a);break; case ‘)’: if(!small.IsEmpty()){ small.Pop(); break; } if(small.IsEmpty()){ cout<<“Wrong!”<<endl; system(“PAUSE”); return 0; } } }while(a!=’0′); if(small.IsEmpty()) cout<<“OK!”<<endl; else cout<<“Wrong!”<<endl; system(“PAUSE”); return 0; } 完毕编码后。编译并执行程序就可以。 ——————————— 以上内容本来收录在我的新书《算法之美——隐匿在数据结构背后的原理(C++版)》中。该书眼下仍在编辑过程中。还未上市销售。小秀一下出版社给的封面方案先 


2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/76224.html