で
おかげで、それはそうです、そして、あなたはそれらを正しく注文したいです。そうすることは簡単ではありません...
正確にそれをしているシステムを構築しようとすると、後ろに隠れているすべての複雑さが表示されます。
各タグはキーで表す必要があります。タグは開かれているか(例えば<html>
)、閉じています(たとえば</html>
)、または空です(たとえば<html />
)。最初の2つのフォームはペアになっている必要があります。そのため、両方とも覚えているようには思えません。閉じたタグが見つからない場合は、とにかくそのエラーを自動的に修正することになります。
ですから、構造(タグ、RequiresClose)でタグを記述し、その後string -> bool
をマッピングするハッシュテーブルまたは辞書を構築し、ブール値は、タグは、対応する終了タグを必要とするかどうかを示す場合があります。
<html>|<title>|</head>|</html>|</title>|<head>
これらのタグは次のように辞書を移入します:
html -> true
title -> true
head -> true
そして、あなたは、タグの出力シーケンスを構築することになる、この辞書のインタプリタを構築する必要があります。以下はインタプリタの擬似コードです。
Interpret()
InterpretHtml()
InterpretHtml()
if html not present in dictionary then quit
if dictionary['html'] = false then print <html /> and quit
print <html>
InterpretHead()
InterpretBody()
print </html>
remove html from dictionary
InterpretHead()
if head not present in dictionary then quit
if dictionary['head'] = false then print <head /> and quit
print <head>
InterpretTitle()
print </head>
remove head from dictionary
InterpretTitle()
if title not present in dictionary then quit
if dictionary['title'] = false then print <title /> and quit
print <title>
// somehow find the title and print it
print </title>
remove title from dictionary
このアプローチは面倒であり、予測可能な出力を生成しません。
したがって、私はあなたの仕事を徹底的に再考し、全く異なる方法で行うことをお勧めします。 HTMLは階層的なドキュメントを生成しているので、スタックを使用して入力上のタグの正しい順序を強制することを検討することができます。
この[リンク](https://msdn.microsoft.com/en-us/library/system.collections)を参照してください。ハッシュテーブル(v = vs.110).aspx)。 – Han
@HandokoChen Hashtableクラスは新しい開発には適していませんが、強く型[Dictionary](https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx)を使用する必要があります。代わりにクラス –
@ScottChamberlain私は知っている。しかし彼はハッシュテーブルについて尋ねました。 – Han