需要帮助将文件读入二叉树

时间:2019-05-27 01:29:03

标签: c++

enter code here好,对于一个课堂项目,我需要进行拼写检查。但是首先我需要将txt文件读入二叉树中,但我无法弄清楚谁能帮助我

#include <iostream>

#include <string>

#include <fstream>

#include "Binarytree.h"

#include "Spellchecking.h"


using namespace std;

int main()
{

    string sentence;
    Binarytree bintree("");
    cout << "Please enter a sentence" << endl;
    cin >> sentence;

    string line;
    ifstream myfile("words_nonalpha.txt", ios::binary);
    /*if (myfile.is_open())
    {
        while (getline(myfile, line))
        {
            cout << line << '\n';
        }   */

    myfile.open("words_nonalpha.txt");

    return 0;
}

好,所以我要放入二叉树。h我以为,如果要添加一个ifstream和文件名,它将起作用,但不会。抱歉,如果我的代码太糟糕了,我今年春天才开始

#ifndef BINARY_TREE_H
#define BINARY_TREE_H

#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

class Binarytree {
public:
    string value;
    Binarytree* left;
    Binarytree* right;
    ifstream myfile("words_nonalpha.txt");

    Binarytree(string value);

    void Add(string value);
    void Addall(vector<string>);
    void OutputAll();
    bool Find(string value, Binarytree*& returningNode);
    vector<bool> FindAll(vector<string>, vector<Binarytree*>&);
    void remove(string, bool);
    vector<string> TreetoVector();

    Binarytree* FindGreatest(Binarytree*);

private:
    void Add(Binarytree*& node, string value);
    void OutputAll(Binarytree* node);
    Binarytree* Find(Binarytree* node, string value);
    void remove(Binarytree*, string);
    Binarytree*& ParentTrap(Binarytree*, string);
    void TreetoVector(Binarytree*, vector<string>&);
    int Compare(string, string);
};
#endif

1 个答案:

答案 0 :(得分:0)

应用单一责任原则

课程应遵循single responsibility principle,其中指出

  

...每个模块,类或功能都应对软件提供的功能的一部分负责,并且该责任应由类完全封装。 (摘自维基百科)

这意味着您的Binarytree类具有一个目的和一个目的:充当二叉树。这意味着Binarytree类不应存储文件或流对象。如果从文件创建二进制树是一种常见的操作,则可以将其作为Binarytree的构造函数之一提供,但Binarytree对象不应拥有

从输入流创建二叉树

使用您在原始问题中给出的二叉树的定义,这非常简单!这就是构造函数的样子:

BinaryTree::Binarytree(std::istream& source) {
    std::string word;
    while(source >> word) // This returns true if a word was read successfully
    {
        this->Add(word); 
    }
}

该构造函数将接受std::ifstream,或者您可以直接从std::cin阅读。