Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#配对HTML标记以检查它们是否正确平衡_C#_Visual Studio 2017 - Fatal编程技术网

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

C#配对HTML标记以检查它们是否正确平衡,c#,visual-studio-2017,C#,Visual Studio 2017,谢谢下面的提示 •当你点击一个,这是你的终点标记 •现在检查>前面的字符。是/吗 •是:查看堆栈顶部。这个字符串与之间的字符串相同吗 如果是,则弹出该项并跳出子循环(找到匹配项!) 如果否,则从方法返回false-您的工作已完成(HTML无效) •否:然后将之间的整个字符串推到堆栈上,并脱离此子循环,继续主循环。 正如@seesharper所建议的,将上面的代码转换为psuedocode,然后再转换为C。 祝您在学习编程的过程中好运 以下是我对问题的分析(我不会给你问题的代码解决方案,因为其他人

谢谢下面的提示

•当你点击一个<你知道你已经点击了一个标记,所以存储这个字符的位置时,你需要一次通过字符串一个字符(对于循环或while循环)

•继续(最好是在子循环中)直到你碰到一个>,这是你的终点标记

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

•是:查看堆栈顶部。这个字符串与之间的字符串相同吗

如果是,则弹出该项并跳出子循环(找到匹配项!)

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

•否:然后将<和>之间的整个字符串推到堆栈上,并脱离此子循环,继续主循环。 正如@seesharper所建议的,将上面的代码转换为psuedocode,然后再转换为C。
祝您在学习编程的过程中好运

以下是我对问题的分析(我不会给你问题的代码解决方案,因为其他人已经指出,这违背了这类练习的目的)。我也没有处理格式不一致(但仍然有效)的HTML和打开-关闭标记特殊情况,例如

,它们在真实HTML中很常见:

  • 每次需要遍历字符串一个字符(
    for
    loop) 或者
    循环时)当你点击一个
    ,这就是 你的终点标记

  • 现在检查
    前面的字符。是不是
    /

  • 是:在堆栈顶部查看。该字符串与
    之间的字符串相同吗

    • 如果是,则弹出该项并跳出子循环(您发现 匹配
    • 如果否,则从方法返回false-您的工作已完成 (HTML无效)
  • 否:然后将
    之间的整个字符串推到堆栈上并 跳出这个子循环,继续主循环
正如@seesharper所建议的,将上面的代码转换为psuedocode,然后再转换为C


祝您在学习编程的过程中好运

当前代码只是检查“{open}”是否完整,以及下一个标记是否也完整,而不是它是否与其close标记配对

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

首先列出您的用例:

  • 你从一个关闭标记开始——找出如何识别它是一个关闭标记,然后当你试图弹出空堆栈时,你知道它没有通过检查

  • 您从一个打开的标记开始—了解如何识别它是一个打开的标记,然后将它推到堆栈上

  • 您找到一个“完整的标记”-一个格式为“”-了解如何识别这种类型的标记。不要使用它,只要识别正确,他就不需要配对

  • 您连续遇到多个打开的标记。将每一个推到堆栈上

  • 您遇到一个close标记-确定它是否与堆栈的顶部元素正确配对-pop,如果它们正确配对则继续-如果它们没有配对则失败

  • 您连续遇到多个关闭标记。冲洗并重复5次,直到标签不匹配,或者您有一个空的堆栈和一个不匹配的闭合

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

    注意:我有意不提供代码,而是提供一些逻辑来帮助您解决问题,因为这是一个家庭作业。你几乎只需要阅读一个文件。2) 字符串。3) 堆叠。如果您需要查找,可以随时获得有关每种方法的语法、属性和方法的资源


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

    您应该能够支持自动关闭标签吗?例如,

    ?此外,结束标记的格式类似于
    ,而不是
    。您的代码与标记余额无关。您需要编写更复杂的代码来跟踪整个标记。此函数匹配开始<和结束>字符,而不匹配标记。您需要理解代码,而不仅仅是复制它。建议:写出你将如何手动完成这项任务,将这些指令转换成伪代码,最后转换成C#。提示:你的代码确实有用。使用堆栈是一个很好的方法,但不要匹配<和>,而是将开始标记与结束标记匹配。通过完成作业而不使用其他人的代码,您将了解更多信息(在约束范围内,您当然可以使用整个.NET库)。使用您不了解的第三方代码会导致灾难。我衷心祝愿您在努力提高编程技能的过程中好运!