gpt4 book ai didi

C++ Trie字典——丢了两天

转载 作者:行者123 更新时间:2023-11-28 00:08:42 25 4
gpt4 key购买 nike

这是我的 dictionary.h 文件:

#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];

真正麻烦的是我不知道这个错误是否一定是我在这一点上做错的,或者如果我不断地与指针作斗争意味着我在链条后面的某个地方搞砸了。

最佳答案

有助于指示行号,但是:Node* tmp = TrieNode->word[i];

TrieNode 是一种类型,所以这没有意义。

更不用说在 createTrie() 中,您有一个与类型 Node *TrieNode = new Node; 同名的局部变量) - 如何实现的完美示例命名约定有助于避免混淆。大多数人会告诉您“CapitalsForTypes,leadingLowerCaseForVars”(或 some_variation_of_that)。

关于C++ Trie字典——丢了两天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34124282/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com