C#配对HTML标签以检查它们是否正确平衡

时间:2018-03-21 23:08:21

标签: c# visual-studio-2017

感谢下面的提示

•你需要一次遍历字符串一个字符(for循环或while循环)当你点击<你知道你已经打了一个标签,所以存储这个角色的位置

•继续前进(最好是在子循环中),直到你点击>这是你的结束标记

•现在检查>之前的字符。是/?

•是:窥视堆栈顶部。该字符串是否与<之间的字符串相同。和/>?

如果是,请弹出该项并突破子循环(您找到了匹配!)。

如果不是,则从方法返回false - 您的工作已完成(HTML无效)。

•NO:然后将整个字符串推到<和>进入堆栈并突破此子循环,并继续主循环。 正如@seesharper建议的那样,将上面的内容转换为伪代码然后转换为C#。 祝你在学习编程的过程中好运!

2 个答案:

答案 0 :(得分:2)

您当前的代码只是检查“{open}”是否完整,并且无论下一个标记是什么,都是完整的,而不是它与其关闭标记配对。

您需要使用字符串而不是字符进行操作。您将阅读“{open}”和“{/ open}”,您需要对它们进行操作。

首先列出您的用例:

  1. 您从一个关闭标记开始 - 弄清楚如何识别它是一个关闭标记,然后当您尝试弹出空堆栈时,您知道它未能通过检查。

  2. 您从一个开放标签开始 - 弄清楚如何识别它是一个开放标签,然后将其推入您的堆栈。

  3. 您会找到一个“完整标记” - 一种格式为“” - 确定如何识别此类标记。什么都不做,一旦被正确识别就不需要配对。

  4. 您会连续遇到多个打开的标签。将每个人推到堆栈上。

  5. 您遇到一个关闭标记 - 确定它是否与堆栈的顶部元素正确配对 - 如果它们已正确配对则弹出并继续 - 如果不匹配则失败。

  6. 您会连续遇到多个关闭标记。冲洗并重复5,直到标签不匹配或您有一个空的堆栈和无与伦比的关闭。

  7. 您当前的代码中有很多良好的逻辑,但需要进行扩展以正确执行分配的任务。

    注意:我故意不提供代码,但有一些逻辑可以帮助您解决问题,因为这是一项家庭作业。您将几乎专门工作1)阅读文件。 2)字符串。 3)堆栈。如果需要查找它们,可以随时获得每种语法,属性和方法的资源。

    另外,我使用了错误的大括号,因为只是标签没有显示,而且是一个快速编辑。

答案 1 :(得分:1)

这是我对问题的分析(我不打算给你解决问题的代码,因为其他人已经指出这会破坏这种练习的目的)。我也没有处理格式不一致(但仍然有效)的HTML和开放式标记特殊情况,例如<br />,它们在实际HTML中很常见:

  • 您需要一次遍历字符串一个字符(for循环 或者while循环)当你点击<时,你知道你已经打了一个标签,所以 存储此角色的位置

  • 继续前进(最好是在子循环中),直到你点击>为止 你的结束标记

  • 现在检查>之前的字符。是/吗?

  • 是:窥视堆栈顶部。该字符串是否与</>之间的字符串相同?

    • 如果是,请弹出该项并突破子循环(您找到了一个 匹配!)。
    • 如果不是,则从方法返回false - 您的工作已完成 (HTML无效)。
  • NO:然后将<>之间的整个字符串推到堆栈上 打破这个子循环,继续主循环。

正如@seesharper建议的那样,将上面的内容转换为伪代码然后转换为C#。

祝你的学习计划好运!