【问题标题】:How can i store a continous output into a full string?如何将连续输出存储到完整字符串中?
【发布时间】:2017-05-07 12:15:46
【问题描述】:

对于下面的代码,我试图将打印的节点存储在变量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 并遇到了同样的问题。

【问题讨论】:

  • 当前丢弃的递归返回结果将有助于实现您似乎正在寻找的东西。尝试使用它们。我很好奇你是如何从 this 代码中获得任何“输出”的。
  • 我编辑了 OP。问题是我试图将输出的字符串存储在单个字符串变量中,并像这样“+ 5 5”在一行中输出。我不太确定递归结果将如何帮助我实现这一目标。
  • std::ostringstream 是这里的正确答案。 “遇到同样的问题”不是有用的问题描述。
  • 哦,好的,谢谢我让它工作了。我猜我还没有很好地概念化递归。

标签: c++ string data-structures binary-tree


【解决方案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';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2015-02-08
    相关资源
    最近更新 更多