对于下面的代码,我试图将打印的节点存储在变量 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"
这样的完整字符串,但附加将输出存储在不同的元素中,而不是单个元素中string 所以我想知道如何实现这个结果?我尝试使用 stringstream
并遇到了同样的问题。
最佳答案
您当前的实现会丢弃递归完成的任何字符串构建,从而使调用者实际上无所作为。它应该看起来像这样:
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';
关于c++ - 如何将连续输出存储为完整字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43831351/