字符串流到字符串返回

Stringstream to string return?

本文关键字:字符串 返回      更新时间:2023-10-16

所以我必须写一个.dot文件来制作一个排序的avl树的图形图像。提供了方法标头,我必须凑合着使用它。

主要问题是当 build_dot_content() 方法是 std::string 的一部分时,如何正确调用该方法?

void avl::dump_dot(std::string filename){
  string s;
  ofstream fptr;
  fptr.open(filename);
  fptr<<"digraph AVL {"<<endl<<"graph [dpi=150];"<<endl<<"nodsep=0.3;"<<endl;
  fptr<<"ranksep=0.2;"<<endl<<"margin=0.1"<<endl<<"node [shape = circle fontname="Helvetica"];"<<endl;
  fptr<<"edge [arrowsize=0.8]"<<endl<<endl;
  stringstream o;
  s=string build_dot_content(o, root, 1);
  fptr<<s<<endl<<"}"<<endl;
}
std::string build_dot_content(std::stringstream &o, avl_node *e, int i) {
  o<<"node"<<i<<" [label =""<<e->element<<""];"<<endl;
  int iL = 2*i;
  int iR = 2*i+1;
  if(e->left != nullptr){
    o<<"node"<<i<<" -> node"<<iL<<";"<<endl;
    build_dot_content(o, e->left, iL);
  }
  if(e->right != nullptr){
    o<<"node"<<i<<" -> node"<<iR<<";"<<endl;
    build_dot_content(o, e->right, iR);
  }
  string s;
  s = o.str();
  return s;
}

您需要将此函数分解为两个;

  1. 与节点和i一起调用的主函数
  2. 仅流式传输节点的第二个函数

使用根节点从第一个函数调用第二个函数,并在该函数中递归调用自身以流出树。在 main 函数的末尾,从流生成字符串并返回它。

--或者

你转储函数已经有一个流,把它与节点和索引一起传递给build_dot_content函数,这可以递归地流出元素 - 它不应该返回字符串......