2

一些上下文代码:

class WordTable
{
    public:
        WordTable();
        ~WordTable();

        List* GetListByAlphaKey(char key);
        void AddListByKey(char key);
        bool ListExists(char key);
        bool WordExists(string word);
        void AddWord(string word);
        void IncrementWordOccurances(string word);
        void Print();
    private:     
        List *_listArray[33];
        int _GetIndexByKey(char key);
};


class TableBuilder
{
    public:
    TableBuilder();
    ~TableBuilder();
    void AnalyzeStream(fstream &inputStream);        
    void PrintResults();
    private:
        void _AnalyzeCursor(string data);
        bool _WordIsValid(string data);
        WordTable* _WordTable;        
};

struct Element {
public:
   string Word;
   int Occurances;
   Element* Next;
};


class List
{
    public:
        List();
        ~List();

        Element* AddElement(string word);       
        void DeleteElement(Element* element);       
        void Print();       
        void Delete();
        Element* First;
        bool WordExists(string word);
        void IncrementWordOccurances(string word);      
    private:
        void _PrintElementDetails(Element* element);
};

要求
我必须分析文本,构建链表数组(其中数组包含每个字母的列表;列表包含在文本中找到的每个单词),然后打印出结果。

问题 我无法在 WordTable.cpp 中初始化列表数组。我知道我误解了一些东西,但我没有想法和时间。任何人?

Ps 是的,这是一个家庭作业。请停止给我有关最佳实践的建议... :)

4

4 回答 4

4

的初始化_listArray如下所示:

WordTable::WordTable() {
  for (int i=0; i<33; i++)
    _listArray[i] = new List();
}

您并没有真正说出究竟是什么问题,所以我不确定这是否有帮助......

于 2009-05-10T22:54:18.560 回答
3

这是因为您正在创建一个指向列表的指针数组。将其更改为 List _listArray[33]; 或像这样初始化它:

for ( int i = 0; i < 33; ++i ) {
    _listArray[i] = new List();
}

// and to access methods
_listArray[i]->AddElement( "word" );
于 2009-05-10T22:54:34.223 回答
3

看来您正在通过拥有一个数组来优化您的链表,每个单词的第一个字母一个。不要那样做。

使用 std::map。其中字符串是单词,int 是您的计数。

编辑:如果你忽略我的建议......正如已经指出的那样,你的 _listArray 实际上是一个指针数组,而不是一个对象数组。我想你想要一个对象数组。由于数组是固定长度的,并且 List 有一个默认构造函数,最简单的方法就是说

List _listArray[33];

如果你想要动态分配,你可以这样做:

List* _listArray;

在构造函数中:

_listArray = new List[33];

在析构函数中:

delete[] _listArray;
于 2009-05-10T22:55:42.253 回答
0

请不要重新发明轮子(再次)使用 std::list 它可以正常工作,更安全,是标准的。

第二:你有设计问题:列表中的元素属性是公共的,但你有一个私有方法???。

于 2009-05-11T14:10:28.690 回答