Это мой dictionary.h файл:C++ Trie словарь - потеряли в течение двух дней
#ifndef DICTIONARY_H
#define DICTIONARY_H
class Dictionary
{
public:
struct Node
{
std::string word;
std::string definition;
static const int ALPHABET_SIZE = 26;
Node* next[ALPHABET_SIZE];
};
typedef Node TrieNode;
typedef TrieNode* Trie;
void createTrie();
bool insertTrie(std::string word, std::string definition);
bool loadDictionary(std::string fileName);
bool lookup(std::string word);
void deleteTrie();
bool writeTrie(std::string fileName);
Dictionary();
~Dictionary();
};
#endif // DICTIONARY_H
Ниже мой файл dictionary.cpp:
#include <iostream>
#include <string>
#include <fstream>
#include <cctype>
#include "dictionary.h"
using namespace std;
Dictionary::Dictionary()
{
createTrie();
}
Dictionary::~Dictionary()
{
deleteTrie();
}
void Dictionary::createTrie()
{
static const int ALPHABET_SIZE = 26;
Node *TrieNode = new Node;
TrieNode->word = "";
TrieNode->definition = "";
for (int i = 0; i < ALPHABET_SIZE; i++)
{
TrieNode->next[i] = nullptr;
}
}
bool Dictionary::insertTrie(string word, string definition)
{
static const int ALPHABET_SIZE = 26;
Node *newNode = nullptr;
newNode = new Node;
for (int i = 0; i < word.length(); i++)
{
int letter = (int)word[i] - (int)'a';
newNode->word[letter];
newNode->definition;
for (int i = 0; i < ALPHABET_SIZE; i++)
{
newNode->next[i] = nullptr;
}
}
}
bool Dictionary::loadDictionary(string fileName)
{
string word;
string definition;
fstream dataFile;
dataFile.open(fileName);
cout << "Loading dictionary..." << endl;
if (dataFile)
{
getline(dataFile, word, ':');
getline(dataFile, definition);
insertTrie(word, definition);
while (!dataFile.eof())
{
getline(dataFile, word, ':');
getline(dataFile, definition);
insertTrie(word, definition);
}
dataFile.close();
return 0;
}
else
{
return 1;
}
}
bool Dictionary::lookup(string word)
{
for (int i = 0; i < word.length(); i++)
{
//char letter = (char)word[i] - (char)'a';
Node* tmp = TrieNode->word[i];
}
}
void Dictionary::deleteTrie()
{
;
}
bool Dictionary::writeTrie(string fileName)
{
fstream dataFile;
dataFile.open(fileName, fstream::out);
dataFile.close();
return 0;
}
И это мой main.cpp :
#include <iostream>
#include <string>
#include <fstream>
#include <cctype>
#include "dictionary.h"
using namespace std;
int main()
{
string fileName;
string word;
char answer = 'y';
int loaded;
int written;
int lookedup;
Dictionary dic;
cout << "Please enter the name of the dictionary file: ";
cin >> fileName;
dic.createTrie();
loaded = dic.loadDictionary(fileName);
while (answer == 'y')
{
cout << "Would you like to look up a word? ";
cin >> answer;
if (answer == 'n')
{
cout << "Would you like to write the dictionary to a file? ";
cin >> answer;
if (answer == 'y')
{
cout << "Please enter the filename you wish to save it too: ";
cin >> fileName;
written = dic.writeTrie(fileName);
return 0;
}
}
else if (answer == 'y')
{
cout << "Enter a word: ";
cin >> word;
lookedup = dic.lookup(word);
}
else
cout << "Please select a valid option.";
}
return 0;
}
Теперь, когда я компилирую это, я получаю следующее сообщение об ошибке:
dictionary.cpp: In member function 'bool Dictionary::lookup(std::__cxx11::string': dictionary.cpp:83:23: error: expected primary-expression before '->' token Node* tmp = TrieNode->word[i];
Что действительно назойливое, я не знаю, является ли эта ошибка чем-то, что я делаю неправильно на этом этапе, или если моя постоянная борьба с указателями означает, что я где-то еще вернулась в цепочку.
В этом коде есть серьезные проблемы, но прежде всего неясно, что должен делать код. Можете ли вы привести пример того, как должна себя вести программа? – Beta