#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'。您接收的文件将仅包含字母字符和空格。 它可能有也可能没有结束字符,但在任何一种情况下都应该忽略它们 做空间。 我建议您通过存储单个字母出现的统计信息来开始此任务 然后尝试用于多通道序列。这样你就知道了树的操作和遍历 在解决字符串问题之前,工作正常。 错误处理:您的程序应该处理所有合理的文件错误。所以如果文件没有 如果存在或无法读取,则应输出错误消息。
答案 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);