2015-12-28 2 views
1
#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». Файл, который вы принимаете, будет содержать только алфавитные символы и пробелы. Он может иметь или не иметь концевые символы, но вы должны игнорировать их в любом случае, как вы делаете для пробелов. Я предлагаю вам начать это задание, сохранив статистику для однобуквенных вхождений , а затем попробуйте его для последовательностей мультиплеер. Таким образом, вы знаете, что операции с деревом и обходы отлично работают, прежде чем вы начнете разбираться с разбором строки. Обработка ошибок: ваша программа должна обрабатывать все разумные ошибки файла. Поэтому, если файл не существует или не может быть прочитан, вы должны вывести сообщение об ошибке.

+0

Ошибка странная. Какой компилятор вы используете? – user2079303

+0

g ++ в программе кодирования моей школы – TheHeroOfCPlus

ответ

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); 
Смежные вопросы