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
答案 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
阅读。