String :: push_back () не отталкивает - PullRequest
0 голосов
/ 20 марта 2012

Я сейчас пишу конвертер инфикса в постфикс.Это работает довольно хорошо, за исключением того, что у меня есть проблемы с добавлением остальной части стека к постфиксу.Стек - это

vector<char>

, а постфикс - это строка.После того, как я все прочитал, я пытаюсь сделать следующее:

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

Но ничего не добавлено.Я даже попробовал его в режиме отладки, и он выглядит нормально, но ничего не добавляется.

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

Опускает последний оператор из стека.Я даже пытался сохранить его временно, но он не выдвигается.

Я не могу опубликовать все четыре файла в pastebin из-за ограничения.Я использую Visual Studio 2010 Ultimate, и здесь нет ошибок, просто нет добавленных символов.

1 Ответ

1 голос
/ 21 марта 2012

То, как вы печатаете эту строку, излишне сложно - и, возможно, неправильно. Если вы замените

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

с

std::cout << postfix;

Затем вы увидите, что на самом деле в строке, , даже если она содержит встроенные нулевые символы .

Поскольку вы используете '\ 0' в качестве индикатора ошибки, но не проверяете его, скорее всего, у вас есть встроенные нули. А с помощью c_str () вы явно просите обрезать строку при первом нуле.

...