#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;
}
Не стесняйтесь, я отправлю сообщение об ошибке и описании проекта.Ошибка в программе двоичных деревьев? Не компилируется?
Error Line 53: ошибка: нет функции согласования для вызова `станд :: basic_fstream> :: basic_fstream (станд :: струнной &, Const станд :: _ Ios_Openmode &)»
Описание проекта: Полный Описание проекта :
В этом задании вы будете использовать двоичное дерево поиска для сбора информации о текстовом файле. Это должно проверить использование двоичных деревьев поиска, базовую обработку файлов и манипуляции с строкой/символом. Справочная информация. В криптографии одним из способов попытаться сломать код является вычисление суммы каждой отдельной буквы, количества комбинаций пар букв, количества трехбуквенных комбинаций и так далее. То есть количество любой определенной подпоследовательности букв. Например, в строке «aadabcdaa», это имеет следующую частоту подпоследовательность
: с 5
B: 1
гр: 1
д: 2
аа : 2
ad: 1
да: 2
AB: 1
BC: 1
CD: 1
ААР: 1
и так далее. Ваша программа будет открыть файл подсчета вхождений до «к» соседних букв, так что если пользователь вводит к = 4, то будет хранить количество всех последовательных последовательностей букв до 4.
Описания: Ваш программа должна начинаться с запроса пользователю имени файла. Затем откройте этот файл и используйте его, если необходимо, для выполнения следующих действий: используйте двоичное дерево поиска, которое хранит на каждом узле как строку, так и количество найденных узлов. Затем перейдите к файлу, указанному (текстовый файл), и, начиная с первой буквы, поместите его в дерево со счетом 1. Затем получите следующий символ в файле, нажмите его на дерево и так далее. Если вы попытаетесь добавить узел с , который уже был добавлен (например, нажав «a» на дерево, которое уже имеет «a», приращение счет на этом узле. Как только это будет сделано, пройдите файл снова и получить все последовательные 2-буквенные вхождения и нажать их на дерево. Опять же, если есть совпадение, увеличьте количество. Повторите весь этот процесс, пока не достигнете длинной последовательности «k». Примечание: вы может, конечно, объединить все эти шаги также, если вы хотите, чтобы он требовал только одного файла .
Вывод: После того, как ваша программа выполняется, сделать заказовМои обход дерева, вывод данных в следующий формат: : с 27
аа: 6
ааа: 3
и т. Д. , указав, что буква a была найдена 27 раз, последовательность «aa» была найдена 6 раз и так далее. Дополнительное усложнение: поскольку в коде используется общий код или вводящий в заблуждение пробелы, либо оставить пробелы полностью, ваш код должен игнорировать любые пробелы в сообщении. Просто используйте алфавитные символы и их последовательность. Так, например, последовательность «a» все равно будет считать последовательной «aa». Файл, который вы принимаете, будет содержать только алфавитные символы и пробелы. Он может иметь или не иметь концевые символы, но вы должны игнорировать их в любом случае, как вы делаете для пробелов. Я предлагаю вам начать это задание, сохранив статистику для однобуквенных вхождений , а затем попробуйте его для последовательностей мультиплеер. Таким образом, вы знаете, что операции с деревом и обходы отлично работают, прежде чем вы начнете разбираться с разбором строки. Обработка ошибок: ваша программа должна обрабатывать все разумные ошибки файла. Поэтому, если файл не существует или не может быть прочитан, вы должны вывести сообщение об ошибке.
Ошибка странная. Какой компилятор вы используете? – user2079303
g ++ в программе кодирования моей школы – TheHeroOfCPlus