我正在尝试为 C++ 分配解析 HTML 文件。作业是演示堆栈;我们应该在每次点击标签时推送到堆栈,然后在找到相应的结束标签时弹出。
老师显然希望我们硬编码一组标签来检测,比如:
// Declare some stacks
Stack html;
Stack div;
...
// When you find an open tag, push to the corresponding stack
if (tagcontents == "html") { html.push(); }
if (tagcontents == "div") { div.push(); }
...
// When you find a close tag, push to the corresponding stack
if (tagcontents == "/html") { html.pop(); }
if (tagcontents == "/div") { div.pop(); }
...
这样做的明显缺点是,如果我想支持HTML 中可用的所有标签,我可以期望进行大量冗余编码。老师显然希望我们只选择可用标签的一小部分,然后去掉那些,但我认为这很蹩脚。由于我很懒(而且我坚信所有程序员都应该如此),我正在尝试提出一个动态解决方案。
这个想法是,每当我遇到一个新标签时,为它创建一个堆栈。这将允许我的程序支持任何标签,无论其有效性如何。不过,我遇到了一个有趣的理论问题,我什至不知道该怎么称呼它来研究它。也就是说,我需要使用变量的 VALUE 作为我实际代码的一部分。IE:
if (no stack exists named "HTML") { create a stack named "HTML" }
简单来说,我怎么能:
tag = "html";
Stack tag; // make a stack named HTML?
还是有其他方法可以做到这一点?任何帮助将不胜感激。如果我无法弄清楚这一点,我可能会像退出者一样使用 switch/case 语句。