0

我目前正在编写一个中缀到后缀转换器。它工作得很好,除了我在将堆栈的其余部分添加到后缀时遇到问题。堆栈是一个

vector<char>

后缀是一个字符串。阅读完所有内容后,我尝试以下操作:

while (!stack.empty()) {
    postfix.push_back(stack.back());
    stack.pop_back();
}

但是没有附加任何内容。我什至用调试模式尝试过它,它看起来很好,但没有附加任何内容。

std::cout << postfix.c_str();

从堆栈中省略最后一个运算符。我什至试图暂时保存它,但它没有被推送。

由于限制,我无法在 pastebin 中发布所有四个文件。我使用 Visual Studio 2010 Ultimate,没有错误,只是没有附加字符。

4

1 回答 1

1

您打印出该字符串的方式是不必要的复杂 - 并且可能是错误的。如果你更换

std::cout << postfix.c_str();

std::cout << postfix;

然后,您将看到字符串中的真正内容,即使它包含嵌入的空字符

由于您使用 '\0' 作为错误指示器但不检查它,因此您可能嵌入了空值。并且通过使用 c_str() 您明确要求在第一个 null 处截断字符串。

于 2012-03-21T08:10:34.343 回答