利用栈进行程序的括号匹配
利用栈进行程序的括号匹配
程序代码:
/** fanchen.cpp : 定义控制台应用程序的入口点。**/#include "stdafx.h"
#include <iostream>using namespace std;
#include <iostream>
#include <fstream>
#include <cstdlib>using namespace std;const int Arsize = 60;class MyStack {
public:/* 判断栈是否是空 */bool isEmpty(){if ( number == 0 ){return(true);}else{return(false);}}/* 入栈操作 */bool push( char c ){if ( number >= maxNumber ){return(false);}number++;array[number] = c;}/* 出栈操作 */char pop(){if ( isEmpty() ){return(-1);}return(array[number--]);}MyStack(){number = 0;}private:/* 栈内的数据数量 */int number;static int maxNumber;char array[100];
};int MyStack::maxNumber = 100;/**
此处注意传递的参数,如不用取地址符,则在此函数内会新建一个对象
*/
bool check( MyStack &stack, char c )
{char temp;switch ( c ){case '[':case '{':case '(':case '<':stack.push( c );break;case ']':temp = stack.pop();cout << "出栈:" << c << " " << temp << endl;if ( temp != '[' ){return(false);}break;case '}':temp = stack.pop();cout << "出栈:" << c << " " << temp << endl;if ( temp != '{' ){return(false);}break;case ')':temp = stack.pop();cout << "出栈:" << c << " " << temp << endl;if ( temp != '(' ){return(false);}break;case '>':temp = stack.pop();cout << "出栈:" << c << " " << temp << endl;if ( temp != '<' ){return(false);}break;}return(true);
}int main()
{/* 自定义栈类 */MyStack stack;/* 暂存字符 */char c;/* 存储数组 */char fileName[Arsize];cout << "Please enter the file's name:\n";/* 读取文件path */cin.getline( fileName, Arsize );/* 定义文件读写流 */fstream inFile;/* 打开文件 */inFile.open( fileName );if ( !inFile.is_open() ){cout << "Could not find the file\n";cout << "Program terminating\n";exit( EXIT_FAILURE );}/* 读取字符并赋值给c */inFile >> c;/* 文件没有结束 */bool flag = true;while ( !inFile.eof() ){if ( inFile.good() ){if ( !check( stack, c ) ){cout << "匹配失败!" << endl;flag = false;break;}inFile >> c;}}if ( flag ){cout << "括号完全匹配" << endl;}system( "pause" );return(0);
}
测试文件:
H.js
var http = require('http');
var querystring = require('querystring');var postHTML = '<html><head><meta charset="utf-8"><title>菜鸟教程 Node.js 实例</title></head>' +'<body>' +'<form method="post">' +'网站名: <input name="name"><br>' +'网站 URL: <input name="url"><br>' +'<input type="submit">' +'</form>' +'</body></html>';http.createServer(function (req, res) {var body = "";req.on('data', function (chunk) {body += chunk;});req.on('end', function () {// 解析参数body = querystring.parse(body);// 设置响应头部信息及编码res.writeHead(200, {'Content-Type': 'text/html; charset=utf8'});if(body.name && body.url) { // 输出提交的数据res.write("网站名:" + body.name);res.write("<br>");res.write("网站 URL:" + body.url);} else { // 输出表单res.write(postHTML);}res.end();});
}).listen(3000);
运行测试:
利用栈进行程序的括号匹配相关推荐
- c语言中缀表达式求值_数据结构考研笔记之栈与队列(四)栈与队列应用括号匹配、中缀表达式转前缀后缀问题...
文字:独木 排版:独木 图片:独木 栈与队列 1.括号匹配问题 栈 例题1 例题2-----不匹配例题1 例题3-----不匹配例题2 2. 表达式求值问题 例题 1.中缀表达式转前缀表达式 2.中缀 ...
- c++数据结构队列栈尸体_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)...
第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...
- c语言中缀表达式求值_数据结构-第三章:栈和队列(栈的应用、括号匹配、表达式转换)
第三章:栈和队列 下面讲解栈的应用主要内容有:栈的应用.括号匹配.中 后 前 缀表达式转换 1.栈的应用 1.1括号匹配 我们在数学运算中 [(A+b)*c] - (E-F) 往往都会有[ ] 和 ( ...
- 数据结构(二)——栈及实现、括号匹配
一.栈的概念与特点 一种特殊的线性表,它的插入和删除运算均在同一端进行.这一端被称为栈顶,另一端为栈底,插入称为进栈,删除称为出栈.有后进先出的性质.栈顶top相当于顺序表中的size,即元素个数.关 ...
- (王道408考研数据结构)第三章栈和队列-第三节1:栈的应用之括号匹配问题和表达式问题(前缀、中缀和后缀)
前面我们就说过,栈是一种先进后出的线性表,这种先进后出的特性就决定了它在一类场合或问题中会经常被用到--递归.考研数据结构中所涉及的利用栈结构解决递归问题或者考察栈结构特性的问题主要有这么几类 括号匹 ...
- python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配
注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...
- 数据结构之栈的应用:括号匹配问题
栈的应用 括号匹配问题: 原理: 代码实现: 括号匹配问题: 原理: 1.括号匹配成功的情况:栈为空 2.括号匹配失败的情况: a.下一个为右括号但是和栈顶左括号不匹配 b.下一个是右括号但栈以空 c ...
- c++栈的学习( 括号匹配问题)
(自存笔记) 1.栈(Stack)是一种线性存储结构,它具有如下特点: (1)栈中的数据元素先进后出.(只从一端进行插入删除操作,所以经常进几个,然后判断一下,再出几个) (2)只能在栈顶进行插入和删 ...
- 数据结构第二版(朱昌杰版)栈的应用之括号匹配
先简要说明题目:括号匹配,如{[()]}这样的是正确的,如{[}]交叉的是错误的,所以得进行判断 先给出正确得图演示 失败的情况 代码后面贴出来~思想有了,后面就是代码编辑,开胃菜
最新文章
- Google工作原理
- 项目管理理论与实践(4)——UML应用(上)
- Android中将布局文件/View添加至窗口过程分析 ---- 从setContentView()谈起
- poj 1451(Trie)
- 结对项目——电梯调度算法的实现和测试
- Network Namespace
- 图论 —— 2-SAT 问题
- 【java】序列化:ProtoBuf 与 JSON 的比较
- Dubbo学习总结(7)——Dubbo不常用功能总结
- 基于用户长短期表示的新闻推荐
- Apache Cassandra 开源数据库软件修复高危RCE漏洞
- 微软私有云分享(R2)9-SCVMM R2和SP1界面的不同
- 基于PostgreSQL+Geoserver+OpenLayers的Webgis台风路径地图服务发布
- 6.MySQL中文排序(根据拼音排序)
- 打造前端MAC工作站(五)让我们熟悉一下 MAC 命令行吧!
- java实现空心三角形
- 测试听力口语软件,上、英语系学姐最全整理的34个英语学习App 针对听力、口语、阅读...
- python中set什么意思_set在python里是什么意思
- 新学的一个清理C盘垃圾的一个方法,分享给大家
- Java咖啡价格问题_【转】咖啡—根据咖啡品种选购杯具