首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文件输出中的错误字符

文件输出中的错误字符
EN

Stack Overflow用户
提问于 2013-07-15 08:57:29
回答 1查看 1.3K关注 0票数 2

递归地将最优二叉搜索树的前序遍历写入.txt文件。代码是:

代码语言:javascript
复制
 void PrintTree(int i, int j, int space)
{
    if(i < j)
    {
        outfile.write("", space++);
        outfile<<A[Rt[i][j]]<<endl;
         PrintTree(i, Rt[i][j], space);
         PrintTree(Rt[i][j] + 1, j, space);
    }
    else
    {
        outfile.write("",space);  //This line
         outfile.write("-\n",2);      
    }
}

此输出适用于小树,例如最多7-10。更重要的是,我得到了一些坏的角色,我似乎找不到他们是从哪里来的。

代码语言:javascript
复制
F

 A

  -

  C

   B

    -

    -

   E

    D

    Ì-

    Ì-

    -

 K

  I

   H

    G

    Ì-

    Ì-

    -

   J

    -

    -

  M

   L

    -

    -

   O

    N

    Ì-

    Ì-

    -

是我得到的输出的一个例子。我不知道代码中的“µ”字符是从哪里来的。

代码语言:javascript
复制
const int n = 15;
char A[n] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',  'O'};
int P[n] = {150, 25, 50, 25, 50, 125, 25, 75, 75, 50, 150, 75, 50, 25, 50};

 int S[n+1][n+1] = {};
 int Rt[n+1][n+1] = {};

这些都是我的初始数组。(上图)

代码语言:javascript
复制
 PrintTree(0, n, 0);

是我对print tree的初始调用。S是文件中的数组,我在comments...it中链接的是数字。Rt包含与An对应的数字。因此,Rti = 1;映射到'B‘的A1。

数组本身并未被越界访问,而且只有当“space”变为4或更大时才会发生这种情况,因此这将是递归的4层深度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-15 09:40:23

这几乎可以肯定是您跟踪递归深度的方式的问题。

代码语言:javascript
复制
outfile.write("",space);

这里告诉write()函数打印空字符串""space字符。在一定程度上,这似乎可以很好地工作(例如,对于您提供的输出,Ì始终出现在深度5处)。

如果您查找它,ostream& write (const char* s, streamsize n)的第一个参数应该是一个至少包含 n字符的数组,它的第二个参数是要写入的字符数。相反,您应该这样做:

代码语言:javascript
复制
outfile << std::string(spaces, ' ') << '-' << std::endl;

它将创建一个新的长度为spaces的空白字符串,并将其写入outfile流。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17645333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档