文件输出中的错误字符

时间:2013-07-15 00:57:29

标签: c++ arrays file-io

以递归方式将最佳二进制搜索树的前序遍历写入.txt文件。 代码是:

 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。不止这些让我有些不好的角色,我似乎无法找到他们来自哪里。

F

 A

  -

  C

   B

    -

    -

   E

    D

    Ì-

    Ì-

    -

 K

  I

   H

    G

    Ì-

    Ì-

    -

   J

    -

    -

  M

   L

    -

    -

   O

    N

    Ì-

    Ì-

    -

是我得到的输出的一个例子。我不知道该代码中的'Ì'字符是什么。

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] = {};

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

 PrintTree(0, n, 0);

我是打印树的初始调用。 S [] []是我在评论中链接的文件中的数组...它是数字。 Rt [] []包含对应于A [n]的数字。所以,Rt [i] [j] = 1;映射到A [1],即'B'。

数组本身不会被越界访问,并且只有在'space'变为4或更大时才会发生,因此这将是递归的4个级别。

1 个答案:

答案 0 :(得分:2)

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

outfile.write("",space);

在这里,您要告诉write()函数打印空字符串space的{​​{1}}个字符。达到某个级别,这似乎工作正常(例如,""总是出现在您提供的输出的深度为5)。

如果您查一查,ostream& write (const char* s, streamsize n)的第一个参数应该是至少 Ì个字符的数组,其第二个参数是字符数来写。相反,你应该做这样的事情:

n

这将为outfile << std::string(spaces, ' ') << '-' << std::endl; 流创建并写入长度为spaces的新空格字符串。