c++ - 文件输出中出现错误字符

标签 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 层。

最佳答案

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

outfile.write("",space);

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

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

outfile << std::string(spaces, ' ') << '-' << std::endl;

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

关于c++ - 文件输出中出现错误字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17645333/

相关文章:

c++ - 对成员函数 set_value 的错误调用不明确(在使用 pugixml 库的 xcode 中)

c++ - 正确更新顶点缓冲对象

c++ - 性能字符串作为函数参数

c++ - 如果你知道地址,你能访问另一个程序的堆栈/堆吗?

c - 具有多个字符数组问题的结构

c - 从 C 语言的旅行推销员文件中获取输入

C++ Windows 在数组中设置值导致程序崩溃

javascript - 将值与数组值进行比较的问题

java - 我如何每隔 [在此处插入间隔] 写入文件?

java - 每次我向网格 Pane 添加一行时,它都会显示 IllegalArgumentException