2012-03-20 40 views
0

我目前正在爲後綴轉換器編寫一箇中綴。它工作得很好,除了我將堆棧的其餘部分添加到後綴時遇到問題。該堆棧是String :: push_back()不推回

vector<char> 

並且後綴是字符串。讀完所有東西后,我嘗試以下內容:

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

但是沒有附加任何內容。我甚至用Debug-mode試過,看起來很好,但沒有任何附加內容。

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

從堆棧中排除最後一個運算符。我甚至試圖暫時保存它,但它不會被推送。

由於限制,我無法在pastebin中發佈所有四個文件。我使用Visual Studio 2010 Ultimate,並且沒有錯誤,只是沒有附加字符。

+1

'stack'是一個向量? – WeaselFox 2012-03-20 14:17:10

+1

你什麼意思是沒有附加任何東西? 'cout << postfix'不顯示任何東西?或者你是否試圖以其他方式評估postfix的內容?提供樣品輸入,提供更多的代碼等等等等 – 2012-03-20 14:17:17

+0

添加反映行爲的示例代碼 – 2012-03-20 14:17:43

回答

1

您打印出該字符串的方式不必要地很複雜 - 並且可能是錯誤的。如果更換

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

std::cout << postfix; 

然後您將看到什麼樣的字符串,即使它包含嵌入的空字符在真的。

由於您正在使用'\ 0'作爲錯誤指示符但未檢查它,因此您可能會嵌入空值。並且通過使用c_str(),您明確要求在第一個空值處截斷字符串。

相關問題