從文件中讀取字符串並按字母順序將它們插入LinkedList(C++)。我製作了節點和列表類,但是它們有問題。我在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();
}
}
}
我可能會在main中聲明一些完全錯誤的東西。 我的輸出看起來像一個帶有隨機字符的地址'0x'。
'LinkedList list = * new LinkedList();'是一個內存泄漏。你如何釋放它?事實上,我認爲你根本不需要一個指針。 – 2014-10-20 20:01:14
是的。我的錯誤。這部分不需要分配 – Sgacedas 2014-10-20 20:18:53
@ DSib13 - '我在Java中完成了這項工作,它可以毫無問題地工作100%因爲Java以垃圾收集的形式爲您完成所有動態內存管理。事實上,由於沒有對'delete'的調用,你的代碼會在整個地方泄漏內存,這是你在Java中不用擔心的。 – PaulMcKenzie 2014-10-20 20:22:53