前提・実現したいこと
大学の課題で二分探索木を使った辞書(簡易図書館みたいなもの)の作成をしています。しかし、テキストファイル を読み込み、二分探索木に書き込むことができません。
テキストファイル の中身は"本の題名","作者","出版した年"の3つです。
Insert(任意の本の追加)やdelete(任意の本の削除)などの機能を実装する予定ですが、テキストファイル を読み込めていないため作り始めることができません。そのため未完成のコードとなります。
C++初学者なため稚拙な質問、駄文、お許しください。
発生している問題・エラーメッセージ
任意のファイルの読み込み・二分探索木への書き込みができない。
該当のソースコード
C++
1#include <iostream> 2#include <fstream> 3using namespace std; 4 5class Library{ 6 public: 7 Library(); 8 string getTitle(); 9 string getAuthor(); 10 int getYear(); 11 void setTitle(string newTitle); 12 void setAuthor(string newAuthor); 13 void setYear(int newYear); 14 private: 15 string title; 16 string author; 17 int year; 18}; 19 20class BinarySearchTree { 21 public: 22 BinarySearchTree() 23 { 24 root = NULL; 25 } 26 bool isEmpty() const { return root==NULL; } 27 void insert(Library); 28 void print(); 29 private: 30 struct node 31 { 32 int key; 33 node* left; 34 node* right; 35 //treeType data; 36 Library data; 37 }; 38 node* root; 39 void printPrivate(node* Ptr); 40}; 41 42Library::Library(){ 43 44}; 45 46void Library::setTitle(string newTitle){ 47 title = newTitle; 48} 49 50void Library::setAuthor(string newAuthor){ 51 author = newAuthor; 52} 53 54void Library::setYear(int newYear){ 55 year = newYear; 56} 57 58string Library::getTitle() { 59 return title; 60} 61 62string Library::getAuthor() { 63 return author; 64} 65 66int Library::getYear(){ 67 return year; 68} 69 70void BinarySearchTree::insert(Library l){ 71 node* t = new node; 72 node* parent; 73 t->data = l; 74 t->left = NULL; 75 t->right = NULL; 76 parent = NULL; 77 // 78 if(isEmpty()) root = t; 79 else 80 { 81 // 82 node* curr; 83 curr = root; 84 // Find the Node's parent 85 while(curr) 86 { 87 parent = curr; 88 if(t->data.getTitle() > curr->data.getTitle()) curr = curr->right; 89 else curr = curr->left; 90 } 91 if(t->data.getTitle() < parent->data.getTitle()) 92 parent->left = t; 93 else 94 parent->right = t; 95 } 96 97} 98 99void BinarySearchTree::print() 100{ 101 printPrivate(root); 102} 103void BinarySearchTree::printPrivate(node* Ptr) 104{ 105 if(root != NULL) 106 { 107 if(Ptr->left) 108 { 109 printPrivate(Ptr->left); 110 } 111 cout<<" "<<Ptr->key<<" "; 112 if(Ptr->right) 113 { 114 printPrivate(Ptr->right); 115 } 116 } 117 else return; 118} 119 120//ファイル読み込み 121void readFile(BinarySearchTree *a){ 122 string fileName; 123 //ファイルの指定 124 cout<<"Enter name of input file:"; 125 cin>>fileName; 126 ifstream file; 127 file >> fileName; 128 file.open(fileName); 129 if(!file) { 130 cout<<"Error opening file. " << endl<<endl; 131 }else{ 132 string title; 133 string author; 134 int year; 135 Library l; 136 while(file >> title >> author >> year){ 137 l.setTitle(title); 138 l.setAuthor(author); 139 l.setYear(year); 140 (*a).insert(l); 141 } 142 } 143 file.close(); 144} 145 146int main() 147{ 148 //Creat a constructor 149 BinarySearchTree a; 150 151 //本の情報 152 string title; 153 string author; 154 int year; 155 156 char ch; 157 string name; 158 string fileName; 159 while(1) 160 { 161 cout<<"Select one of:"<<endl<<endl; 162 cout<< "(L)oad books from text file"<<endl; 163 cout<< "(P)rint entire library"<<endl; 164 cout<< "add a (N)ew book to the libary"<<endl; 165 cout<< "(D)elete a book from the library"<<endl; 166 cout<< "(S)earch for a book with full key data"<<endl; 167 cout<< "(M)aximum search depth"<<endl; 168 cout<< "search for a book by (T)itle"<<endl; 169 cout<< "search for a book by (A)uthor"<<endl; 170 cout<< "(C)heckout a book"<<endl; 171 cout<< "(R)eturn a book"<<endl; 172 cout<< "(Q)uit"<<endl<<endl; 173 cout<<"Enter choice: "; 174 cin>>ch; 175 switch(ch) 176 { 177 case 'L' : 178 readFile(&a); 179 break; 180 case 'P' : 181 a.print(); 182 break; 183 //任意の本を追加 184 /*case 'N' : 185 break; 186 //任意の本を削除 187 case 'D' : 188 break; 189 case 'S' : 190 break; 191 case 'M' : 192 break; 193 case 'T' : 194 break; 195 case 'A' : 196 break; 197 case 'C' : 198 break; 199 case 'R' : 200 break;*/ 201 case 'Q' : 202 return 0; 203 204 } 205 } 206}
補足情報(FW/ツールのバージョンなど)
テキストファイル の内容は以下です
HitchHiker's Guide To The Galaxy, The
Adams, Douglas
1979
Restaurant At The End of The Universe, The
Adams, Douglas
1980
Life, The Universe, and Everything
Adams, Douglas
1982
Mostly Harmless
Adams, Douglas
1992
Calculus
Stewart, James
2020
Calculus
Strang, Gilbert
2010
Calculus
Stewart, James
2012
回答1件
あなたの回答
tips
プレビュー