1

我敢肯定,对于大多数人来说,这是一个非常简单的问题。但是我正在用 C++ 为 XML 编写一个令牌识别器,并且我正在使用一个堆栈来确保有匹配的开始和结束标签。好吧,我的标签是 c 字符串...

char BeginTag[MAX];

我正在尝试将其推送到我的模板堆栈中。但我不确定传递堆栈的类型。我试过了...

stack<char> TagStack;

但这不起作用。我已经尝试了其他一些解决方案,但似乎都没有。有人能帮我吗?

4

2 回答 2

3

数组不可赋值,因此不能用作容器值类型。

但是,您可以定义一个包含数组的结构并使用它:

struct Tag {
    char name[MAX];
};

stack<Tag> TagStack;

或者只使用 astd::string作为您的标签。

于 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 分配了一个额外的字符。这可能只是一个样式问题,但它也可能有助于防止错误。

于 2010-11-05T20:48:28.487 回答