HTML括号匹配算法
题目
题目内容:
实现扩展括号匹配算法,用来检查HTML文档的标记是否匹配。
HTML标记应该成对、嵌套出现,
开标记是这种形式,闭标记是这种形式。
输入格式:
共1行,为一个字符串,即一个HTML文档中的内容。
输出格式:
共1行,为True或者False,表示该字符串中的标记是否匹配。
输入样例:
<html> <head> <title>Example</title> </head> <body> <h1>Hello, world</h1> </body> </html>
输出样例:
True
思路
- 将其看作一个长字符串,依次读取每个字符。
- 遇到’<’ ‘>’ '</ '时进行特殊处理。
- 想要判断标签是否配对,是否有冗余的标签,标签内是否存在语法错误等。
方法
- 使用栈来存储标签,第一个出现的类似 前的一个标签 一定是 ,使用这个性质来进行出栈操作,若出栈失败,则存在语法结构上的错误。
- 当整个字符串读取完的时候,栈内还有东西,则出栈不完全,存在标签的多余,返回false;.
- 使用一个work工作指针,始终指向当前的正在处理的位置,遇到<> or </>时,将其中标签名使用字符串操作str2(str1,a,b)(str1从a开始b个长度的字符新建为str2). 将其新建一个字符串后入栈(stack S )。
代码
/* Author : YaaaZa! ?
* Time : 2018.10.21
* 实现扩展括号匹配算法,用来检查HTML文档的标记是否匹配
*/#include<stack>
#include<iostream>
#include<string>
using namespace std;
stack<string> S;bool haveBegin(int& begin, const string htmStr){ //检测开头第一个 <for (; begin < htmStr.length(); begin++){if (htmStr[begin] == ' ') continue;else if (htmStr[begin] == '<') return true;else return false;}return false;
}
bool getNext(int& work,const string htmStr) { //主要函数 判断在 < 后 出现的标签是否合法 是否拥有 > 收尾 若有 则进行栈操作int lon = work++;for (; work < htmStr.length(); work++) {if (htmStr[work] == ' ') {return false;}else if (htmStr[work] == '>') { //有 > 号 string temp(htmStr, lon+1, work - lon - 1);if (htmStr[lon] == '/') //如果这是一个 类似 </tag> 的结束标签 则在栈顶拿 若拿不到与之一样的前置标签,则返回falseif (S.top() == temp){S.pop();return true;}else return false;else { //如果这是一个 类似 <tag> 的开始标签 则入栈,返回trueS.push(temp);return true;}}else continue;}return false;
}
int main(){string inStr;int numOfLeft = 0;int numOfRIght = 0;getline(cin, inStr);int length = inStr.length();int begin = 0;bool pass = false;if (haveBegin(begin,inStr)) {for (int work = begin; work < length; work++ ) {if (inStr[work] == '<' && inStr[work + 1] != '/') { //判断是否是 if (getNext(work, inStr)){//cout << " here is a pre TAG" << endl;continue;}else {//cout << "false" << endl;}}else if (inStr[work] == '<' && inStr[work + 1] == '/') {work++;if (getNext(work, inStr)) {//cout << " here is a later TAG" << endl;continue;}else {//cout << "false" << endl;}}else {//cout << " here is a title s" << endl;continue;}}}if (S.empty()) cout << "true";else cout <<"false";return 0;
}
HTML括号匹配算法相关推荐
- 括号匹配编码c语言,用c语言实现括号匹配算法
/*括号匹配算法*/ #include #define FALSE 0 #define TRUE 1 #define MAXSIZE 100 typedef char DataType; //定义栈 ...
- 括号匹配算法 java_括号匹配算法
括号匹配算法 题目来自网络搜集和常考算法,如有侵权请联系我 题目描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的 ...
- python括号配对问题_使用Python的栈实现括号匹配算法
写一个栈的类:stack.py class Stack: def __init__(self): self.items = [] def is_Empty(self): return self.ite ...
- python括号匹配算法_使用Python的栈实现括号匹配算法
利用Python列表实现一个栈的结构,再使用栈实现括号匹配的算法,所谓的括号匹配是指在编程语言中,括号是成对出现的,最先出现的左括号,对应于最后的右括号,后出现的左括号对应于最新右括号,符合栈的特征 ...
- 括号匹配算法问题 JS
事例一:算法简述 a:遍历输入测试的字符串,模板括号字符加入数组(用于最后进行比较判断): b:遍历字符串数组,先进行判断长度为空,在进行判断是否为奇偶数,如果是偶数,就进行下一步,比较算法为:遍历字 ...
- python实现括号匹配算法_Python实现括号匹配方法详解
这篇文章主要简介了python实现括号匹配方法详解,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 1.用一个栈[python中可以用List]就可 ...
- 【数据结构】【栈】括号匹配算法(可直接运行)
文章目录 1.算法问题 2.算法思路 3.算法实现 4.完整代码 5.运行结果 1.算法问题 假设表达式中允许包含三种括号:().[].{},其嵌套的顺序任意,即([]{})或[()[]{}]等均为正 ...
- 括号匹配算法 java_使用栈实现括号匹配算法-java
题目:检验符号是否匹配. '['和']', '('和')'成对出现时字符串合法. 例如"[][]()", "[[([]([])()[])]]"是合法的; &qu ...
- python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配
注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...
最新文章
- 权限管理----角色管理
- java addfirst_java – ArrayDeque类的addFirst方法
- Java Timestamp Memo
- 【DevCloud·敏捷智库】如何利用故事点做估算
- 【刘文彬】 Controller:EOS区块链核心控制器
- 达内TTS6.0课件basic_day05
- linux命令分析---SED (二)
- QQ登录超时,请检查您的网络或本机防火墙设置【00001】
- 斐讯k2路由虚拟服务器,斐讯K2T分离式无线路由器 新思路解决老问题(无线信号那些事)...
- 深入解析MySQL索引原理
- iPhone十年越狱史
- PID控制器原理概述
- ISA防火墙规则练习
- OpenCASCADE:OCCT WebGL 查看器示例
- Centos7授权普通用户管理员权限
- linux的三权分立设计思路和用户创建(安全管理员、系统管理员和审计管理员)
- excel shell合成_shell快速合并多个Excel表格
- H263,H264简介
- spring boot初始化完成时(两种方式)执行某种操作
- vs编译时WinSock2.h级ws2def.h大量报错