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?
または、これを行う別の方法はありますか?どんな助けでも大歓迎です。これがわからない場合は、おそらくquitterのようにswitch/caseステートメントを使用します。