C++ - 使用堆栈制作 HTML 验证器
C++ - Making an HTML Validator using Stack
我的讲师给我布置了一项作业,要求我使用堆栈制作 HTML 验证器。由于堆栈只能执行 LIFO,因此我无法围绕算法进行此操作,我应该怎么做才能检查标签是否已关闭?可能吗?任何答案都会有所帮助,因为我已经被困了几天了。提前致谢!
顺便说一句,我的讲师给了我一个例子 运行:
<html>
<head>
<title>
Example
</title>
</head>
<body>
<h1>Hello, world</h1>
</body>
</html>
在堆栈中,您将新元素推到顶部并通过弹出最新元素来移除它们。因此,您可以将开始标签压入堆栈,直到出现结束标签,然后检查堆栈顶部的元素是否与结束标签匹配。如果另一个开始标签出现在结束标签之后,只需将其再次压入堆栈并继续此操作直到到达堆栈中的最后一个元素。如果每个元素都有匹配的结束标记,则 html 文档应该有效。
伪代码:
while (has_unresolved_tags) {
if (is_opening_tag) {
stack.push(opening_tag);
} else {
// peek the last element of the stack
if (stack.peek() == closing tag of opening tag) {
stack.pop()
} else {
// not a valid html document, exit
}
}
我的讲师给我布置了一项作业,要求我使用堆栈制作 HTML 验证器。由于堆栈只能执行 LIFO,因此我无法围绕算法进行此操作,我应该怎么做才能检查标签是否已关闭?可能吗?任何答案都会有所帮助,因为我已经被困了几天了。提前致谢!
顺便说一句,我的讲师给了我一个例子 运行:
<html>
<head>
<title>
Example
</title>
</head>
<body>
<h1>Hello, world</h1>
</body>
</html>
在堆栈中,您将新元素推到顶部并通过弹出最新元素来移除它们。因此,您可以将开始标签压入堆栈,直到出现结束标签,然后检查堆栈顶部的元素是否与结束标签匹配。如果另一个开始标签出现在结束标签之后,只需将其再次压入堆栈并继续此操作直到到达堆栈中的最后一个元素。如果每个元素都有匹配的结束标记,则 html 文档应该有效。
伪代码:
while (has_unresolved_tags) {
if (is_opening_tag) {
stack.push(opening_tag);
} else {
// peek the last element of the stack
if (stack.peek() == closing tag of opening tag) {
stack.pop()
} else {
// not a valid html document, exit
}
}