2017-05-07 53 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'; 
相关问题