题目

题目内容:

实现扩展括号匹配算法,用来检查HTML文档的标记是否匹配。

HTML标记应该成对、嵌套出现,

开标记是这种形式,闭标记是这种形式。

输入格式:

共1行,为一个字符串,即一个HTML文档中的内容。

输出格式:

共1行,为True或者False,表示该字符串中的标记是否匹配。

输入样例:

<html> <head> <title>Example</title> </head> <body> <h1>Hello, world</h1> </body> </html>

输出样例:

True


思路

  1. 将其看作一个长字符串,依次读取每个字符。
  2. 遇到’<’ ‘>’ '</ '时进行特殊处理。
  3. 想要判断标签是否配对,是否有冗余的标签,标签内是否存在语法错误等。

方法

  1. 使用栈来存储标签,第一个出现的类似 前的一个标签 一定是 ,使用这个性质来进行出栈操作,若出栈失败,则存在语法结构上的错误。
  2. 当整个字符串读取完的时候,栈内还有东西,则出栈不完全,存在标签的多余,返回false;.
  3. 使用一个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括号匹配算法相关推荐

  1. 括号匹配编码c语言,用c语言实现括号匹配算法

    /*括号匹配算法*/ #include #define FALSE 0 #define TRUE 1 #define MAXSIZE 100 typedef char DataType; //定义栈 ...

  2. 括号匹配算法 java_括号匹配算法

    括号匹配算法 题目来自网络搜集和常考算法,如有侵权请联系我 题目描述 给出一个仅包含字符'(',')','{','}','['和']',的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的 ...

  3. python括号配对问题_使用Python的栈实现括号匹配算法

    写一个栈的类:stack.py class Stack: def __init__(self): self.items = [] def is_Empty(self): return self.ite ...

  4. python括号匹配算法_使用Python的栈实现括号匹配算法

    利用Python列表实现一个栈的结构,再使用栈实现括号匹配的算法,所谓的括号匹配是指在编程语言中,括号是成对出现的,最先出现的左括号,对应于最后的右括号,后出现的左括号对应于最新右括号,符合栈的特征 ...

  5. 括号匹配算法问题 JS

    事例一:算法简述 a:遍历输入测试的字符串,模板括号字符加入数组(用于最后进行比较判断): b:遍历字符串数组,先进行判断长度为空,在进行判断是否为奇偶数,如果是偶数,就进行下一步,比较算法为:遍历字 ...

  6. python实现括号匹配算法_Python实现括号匹配方法详解

    这篇文章主要简介了python实现括号匹配方法详解,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 1.用一个栈[python中可以用List]就可 ...

  7. 【数据结构】【栈】括号匹配算法(可直接运行)

    文章目录 1.算法问题 2.算法思路 3.算法实现 4.完整代码 5.运行结果 1.算法问题 假设表达式中允许包含三种括号:().[].{},其嵌套的顺序任意,即([]{})或[()[]{}]等均为正 ...

  8. 括号匹配算法 java_使用栈实现括号匹配算法-java

    题目:检验符号是否匹配. '['和']', '('和')'成对出现时字符串合法. 例如"[][]()", "[[([]([])()[])]]"是合法的; &qu ...

  9. python 栈_Python数据结构与算法05:基本结构:栈的应用之括号匹配

    注:本文如涉及到代码,均经过Python 3.7实际运行检验,保证其严谨性. 本文阅读时间约为7分钟. 算法流程 括号匹配情况介绍 我们经常会遇到类似(9-1)*(8+7)/(4-2).print(& ...

最新文章

  1. 权限管理----角色管理
  2. java addfirst_java – ArrayDeque类的addFirst方法
  3. Java Timestamp Memo
  4. 【DevCloud·敏捷智库】如何利用故事点做估算
  5. 【刘文彬】 Controller:EOS区块链核心控制器
  6. 达内TTS6.0课件basic_day05
  7. linux命令分析---SED (二)
  8. QQ登录超时,请检查您的网络或本机防火墙设置【00001】
  9. 斐讯k2路由虚拟服务器,斐讯K2T分离式无线路由器 新思路解决老问题(无线信号那些事)...
  10. 深入解析MySQL索引原理
  11. iPhone十年越狱史
  12. PID控制器原理概述
  13. ISA防火墙规则练习
  14. OpenCASCADE:OCCT WebGL 查看器示例
  15. Centos7授权普通用户管理员权限
  16. linux的三权分立设计思路和用户创建(安全管理员、系统管理员和审计管理员)
  17. excel shell合成_shell快速合并多个Excel表格
  18. H263,H264简介
  19. spring boot初始化完成时(两种方式)执行某种操作
  20. vs编译时WinSock2.h级ws2def.h大量报错

热门文章

  1. 承接机器视觉项目到底应该选哪个解决方案?传统机器视觉 vs 人工智能
  2. Drag Gan,AI绘画又有了重大突破
  3. 16进制 BCC校验(异或校验) Java代码
  4. Qt_C++JSON转结构体
  5. 【统计学】区分定类、定序、定距、定比变量!!
  6. linux 键盘不起作用,linux – 用键盘按下关机不起作用
  7. CMMI认识和访谈的一些问题
  8. IT相关的术语(O2O、C2C、B2B、B2C…等等…)通俗解释
  9. poj3287 (模拟水题 | 简单BFS)
  10. C#实现弹出确定取消对话框