我从文件中读取字符串并按字母顺序(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'。
答案 0 :(得分:2)
您正在temp
打印出temp
Node*
Node
。指针只是对象的地址,因此您在输出中获取地址的原因。
好像你想得到cout << temp->getWord();
包含的字符串。如果是这样,你想要:
new
您遇到的另一个问题是关闭文件并在循环内打印列表,这意味着它会在读取第一个单词后立即发生。您可能意味着在循环后执行,因此可以读取文件中的所有单词。
您对此标记的行也有问题。使用delete
关键字将动态分配对象。稍后需要使用*
删除这些对象。但是,您取消引用动态分配的对象(使用LinkedList list;
)并复制它,丢失对动态分配的对象的任何引用 - 这是典型的内存泄漏。这里的动态分配完全没必要。只是做:
{{1}}