1

ほとんどの場合、これは非常に簡単な質問だと思います。しかし、私はc ++でXMLのトークン認識機能を作成しており、スタックを使用して、開始タグと終了タグが一致していることを確認しています。さて私のタグはc文字列です...

char BeginTag[MAX];

それをテンプレートスタックにプッシュしようとしています。しかし、スタックを渡すタイプがわかりません。私が試してみました...

stack<char> TagStack;

しかし、それはうまくいきません。私は他のいくつかの解決策を試しましたが、どれもうまくいかないようです。誰かが私を助けることができますか?

4

2 に答える 2

3

配列は代入できないため、コンテナーの値の型として使用できません。

ただし、配列を含む構造体を定義して、それを使用することもできます。

struct Tag {
    char name[MAX];
};

stack<Tag> TagStack;

またはstd::string、タグに a を使用します。

于 2010-11-05T20:48:19.113 に答える
1

動作しないコードを投稿して、どのように動作しないかを教えていただけると助かります。(コンパイル時エラー? 実行時エラー?) しかし、私の提案は、少なくともスタック上で std::string を使用することです:

using namespace std;
stack<string> TagStack;

明示的なキャストなしでスタックにプッシュできるはずです。

TagStack.push(BeginTag);

注: この目的で C 文字列を使用することはお勧めしません。トークナイザーでも std::string を使用します。しかし、それはあなたの電話です。引き続き char 配列を使用する場合は、char[MAX] を char[MAX+1] に変更することをお勧めします。MAX は通常、文字列内の非 null 文字の最大数を示すために使用されるためです。したがって、終端の null に 1 つの余分な文字が割り当てられていることを確認する必要があります。これは単なるスタイルの問題かもしれませんが、バグの防止にも役立つ場合があります。

于 2010-11-05T20:48:28.487 に答える