2017-05-07 41 views
0

對於下面的代碼,我試圖讓打印的節點以變量s內的完整表達式存儲在字符串中。如何將連續輸出存儲爲完整字符串?

string ExprTree::prefixOrder(const ExprTree & t){ 
    string s; 
    if (t.root != NULL){ 
    s.append(t.root->toString()); 
    prefixOrder(t.root->getLeftChild()); 
    prefixOrder(t.root->getRightChild()); 
    } 
     std::cout << s << std::endl; 
     return s; 
} 

對於算術表達式即5 + 5

我得到的輸出:

5 
5 
+ 

不過,我想在字符串s在一個完整的字符串來存儲這些像"+ 5 5"但附加存儲輸出在不同的元素,而不是在一個單一的字符串,所以我想知道我如何能夠實現這個結果?我嘗試使用stringstream並遇到同樣的問題。

+1

您的遞歸目前丟棄的返回結果將有助於實現您似乎尋求的東西。嘗試使用它們。我很好奇你是如何從* this *代碼中得到任何「輸出」的。 – WhozCraig

+0

我編輯了OP。問題是我試圖獲取輸出的字符串存儲在一個單一的字符串變量和輸出在一個單一的行,如「+ 5 5」。我不確定遞歸結果如何幫助我實現這一點。 –

+1

'std :: ostringstream'在這裏是正確的答案。 「跑到同一個問題」不是一個有用的問題描述。 –

回答

1

您當前的實現會放棄由遞歸完成的任何字符串構建,從而使其調用者無法爲其努力顯示任何內容。它應該看起來像這樣:

std::string ExprTree::prefixOrder(const ExprTree & t) 
{ 
    std::string s; 
    if (t.root != NULL) 
    { 
     s.append(t.root->toString()); 
     s.append(prefixOrder(t.root->getLeftChild())); 
     s.append(prefixOrder(t.root->getRightChild())); 
    } 
    return s; 
} 

因此,給定您的根表達式樹,您將獲得前綴順序作爲最終輸出。根呼叫者看起來就像這樣:

ExprTree tree; 

// 
// build tree... 
// 

std::cout << prefixOrder(tree) << '\n'; 
相關問題