二叉树程序出错?不会编译?

时间:2015-12-28 10:22:03

标签: c++ compiler-errors tree binary-tree

#include<iostream>
#include<string>
#include<fstream>
using namespace std;

struct node
{
  char data;
  int count;
  node * left;
  node *right;
};

//to create a new node 
node* create_node(char ch)
{
  node *new_node=new node;
  new_node->data=ch;
  new_node->count=1;
  new_node->left=NULL;
  new_node->right=NULL;
  return new_node;
}

//function to insert a data in new node
node * insert_data(node *root,char ch)
{
  if (root==NULL) {
    return create_node(ch);
  }

  if (ch==root->data) {
    (root->count)++;
    return root;
  }

  if (ch<root->data)
    root->left=insert_data(root->left,ch);
  else 
    root->right=insert_data(root->right,ch);

  return root;
}

//preorder traversal of BST(binary search tree)
void display(node* temp)    
{
  if (temp==NULL)
    return;
  cout<<temp->data<<" ";
  cout<<temp->count<<endl;
  display(temp->left);
  display(temp->right);
}

int main()
{ 
  string file_name;char ch;
  cout<<"enter file name\n";
  cin>>file_name;
  fstream file(file_name,ios::in);
  node* root;
  root=NULL;
  //reading characters from a file
  while (file>>ch&&file!='\0')
    {    
      root=insert_data(root,ch);    
    }

  file.close();
  display(root);
  return 0;    
}

请耐心等待,因为我将发布错误和项目说明。

错误第53行:错误:没有匹配函数来调用`std :: basic_fstream&gt; :: basic_fstream(std :: string&amp;,const std :: _ Ios_Openmode&amp;)&#39;

项目描述:完整项目描述:

在此作业中,您将使用二叉搜索树来收集有关文本文件的信息。 这应该测试二进制搜索树的使用,基本文件处理和字符串/字符操作。 背景:在密码学中,尝试破解代码的一种方法是计算数量 每个单个字母,字母对的组合数量,3个字母组合的数量 等等。也就是说,字母的任何特定子序列的数量。 例如,在字符串“aadabcdaa”中,它具有以下子序列频率

a:5

b:1

c:1

d:2

aa:2

ad:1

da:2

ab:1

bc:1

cd:1

aad:1

等等。 您的程序将打开一个文件,计算出连续字母'k'的出现次数,如果是 用户输入k = 4,您将存储最多4个连续字母序列的数量。

描述:您的程序应该首先提示用户输入文件名。然后,打开那个 文件并根据需要使用它来执行以下操作:使用存储在每个节点的二叉搜索树 字符串和它找到的节点数量的计数。然后,浏览给出的文件 (文本文件),从第一个字母开始,将它放在树上,计数为1.然后得到下一个 文件中的字符,将其推送到树上,依此类推。如果您尝试添加具有的节点 已经添加(例如,将'a'推送到已经有'a'的树上,增量 该节点的计数。 完成后,再次浏览该文件并获取所有连续的2个字母的出现次数 并将它们推到树上。同样,如果匹配,则递增计数。 重复整个过程,直到达到'k'长序列。 注意:如果您想要只需要一个步骤,您当然也可以组合所有这些步骤 读取文件。

输出:程序完成后,执行树的顺序遍历,输入数据 格式如下: a:27

aa:6

aaa:3

等。 表示字母a被发现27次,序列'aa'被发现6次,依此类推。 额外的复杂性:因为在代码中使用误导性空格或离开是很常见的 完全填空,你的代码应该忽略消息中的任何空格。简单地处理 字母字符及其顺序。因此,例如,序列'a a'仍将计数 连续'aa'。您接收的文件将仅包含字母字符和空格。 它可能有也可能没有结束字符,但在任何一种情况下都应该忽略它们 做空间。 我建议您通过存储单个字母出现的统计信息来开始此任务 然后尝试用于多通道序列。这样你就知道了树的操作和遍历 在解决字符串问题之前,工作正常。 错误处理:您的程序应该处理所有合理的文件错误。所以如果文件没有 如果存在或无法读取,则应输出错误消息。

1 个答案:

答案 0 :(得分:1)

更改

fstream file(file_name,ios::in);

fstream file(file_name.c_str(),ios::in);

您可能使用C ++ 98/03进行编译

根据cplusplus,使用C ++ 98,fstream的构造函数是

explicit fstream (const char* filename,
              ios_base::openmode mode = ios_base::in | ios_base::out);