没有错误,但输出不对。指针问题可能

时间:2014-10-20 19:56:10

标签: c++ class file-io

我从文件中读取字符串并按字母顺序(C ++)将它们插入到LinkedList中。我已经创建了节点和列表类,但它们有问题。我在Java中完成了这项工作,它100%正常工作,没有任何问题。这让我相信我必须搞砸某个地方的指针。这也是我第二次使用' - >'符号。所以我可能在某处错误地使用过它。一些有用的提示表示赞赏。提前致谢。

//NODE CLASS
#include <string>
#include <iostream> 
using namespace std;

class Node {
    string word;
    int count;
    Node* next;

    public:
    Node (string aWord) {
        word = aWord;
        count = 1;
    }

    Node (string aWord, Node* theNext) {
        word = aWord;
        next = theNext;
    }

    void increaseCount() {
        count++;
    }

    string getWord() {
        return word;
    }

    int getCount() {
        return count;
    }

    Node* getNext() {
        return next;
    }

    void setNext(Node* theNext) {
        next = theNext;
    }
};

//LIST CLASS
#include<iostream>
using namespace std;

class LinkedList {
    Node* head;

    public:
    LinkedList() {
        head = new Node(" ");
    }

    void insert(string word) {
        Node* temp = head;
        Node* previous = head;

    while (temp != NULL && temp->getWord() < word) {
        previous = temp;
        temp = temp->getNext();
    }

    if (temp == NULL) {
        Node* node= new Node(word);
        previous-> setNext(node);
    } else {
        if (temp-> getWord() == word) {
            temp->increaseCount();
        } else if (temp->getWord() > word) {
            Node* node = new Node(word, temp);
            previous->setNext(node);
        }
      }
    }

    void print() {
        Node* temp = head->getNext();
        while (temp != NULL) {
            cout<< temp;
            temp=temp->getNext();
        }
    }
};

//MAIN
#include <iostream>
#include <iostream>
#include <fstream>
#include "Node.h"
#include "LinkedList.h"
using namespace std;

int main(int argc, const char * argv[]) {

        ifstream inFile("WordsStatisticData1.txt");

        if (!inFile.is_open())
        cout<< "Could not open the file"<< endl;

        else {
            string readData;
            LinkedList list = *new LinkedList(); //Probably a problem here

            while (inFile >> readData) {
                list.insert(readData);
                inFile.close();

                list.print();
            }
        }
    }

我也可能在主要内部宣称完全错误。 我的输出看起来像一个带有随机字符的地址'0x'。

1 个答案:

答案 0 :(得分:2)

您正在temp打印出temp Node* Node。指针只是对象的地址,因此您在输出中获取地址的原因。

好像你想得到cout << temp->getWord(); 包含的字符串。如果是这样,你想要:

new

您遇到的另一个问题是关闭文件并在循环内打印列表,这意味着它会在读取第一个单词后立即发生。您可能意味着在循环后执行,因此可以读取文件中的所有单词。

您对此标记的行也有问题。使用delete关键字将动态分配对象。稍后需要使用*删除这些对象。但是,您取消引用动态分配的对象(使用LinkedList list; )并复制它,丢失对动态分配的对象的任何引用 - 这是典型的内存泄漏。这里的动态分配完全没必要。只是做:

{{1}}