Stringstream返回字符串?

时间:2016-06-09 18:32:01

标签: c++ stringstream

所以我必须编写一个.dot文件来制作一个已排序的avl树的graphviz图像。方法标题已提供,我必须使用它。

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

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 个答案:

答案 0 :(得分:0)

您需要将此功能分解为两个;

  1. 使用节点和i
  2. 调用的主要功能
  3. 仅流出节点的第二个功能
  4. 使用根节点从第一个函数调用第二个函数,并在该函数中递归调用自身以流出树。在main函数的末尾,从流生成字符串并将其返回..

    - 或者

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