C ++ - 将C字符串推送到模板堆栈

时间:2010-11-05 20:41:09

标签: c++ stack cstring

我相信大多数情况下这是一个非常简单的问题。但我正在用c ++编写XML的令牌recoginzer,我正在使用堆栈来确保匹配的开始和结束标记。好吧,我的标签是c字符串......

char BeginTag[MAX];

我想把它推到我的模板堆栈上。但我不确定通过堆栈的类型。我试过......

stack<char> TagStack;

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

2 个答案:

答案 0 :(得分:3)

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

您可以定义包含数组的struct ,然后使用:

struct Tag {
    char name[MAX];
};

stack<Tag> TagStack;

或者只为您的代码使用std::string

答案 1 :(得分:1)

如果你发布了不起作用的代码,它会有所帮助,并告诉我们它是如何工作的。 (编译时错误?运行时错误?)但我的建议是使用std :: string,至少在堆栈上:

using namespace std;
stack<string> TagStack;

你应该能够在没有明确演员的情况下进入筹码:

TagStack.push(BeginTag);

注意:我不认可您为此目的使用C字符串;我也在tokenizer中使用std :: string。但那是你的电话。如果继续使用char数组,则可能需要将char [MAX]更改为char [MAX + 1],因为MAX通常用于表示字符串中的最大非空字符数。因此,您需要确保为终止null分配了一个额外的char。这可能只是一个样式问题,但它也可能有助于防止错误。