2013-07-16 82 views
0

我有一個構造函數和一個名爲StringList的析構函數。我創建了添加,刪除和清除鏈表中的字符串的函數。即使程序結束,我也希望此程序保留其添加的字符串。我可以做到這一點的一種方式是讓我的構造函數從文件中讀取,而我的析構函數將字符串保存到同一個文件中。我是編程方面的全新人物,並且一直在尋找如何做到這一點的鏈接列表,但是迄今爲止我已經死亡。我讀取的文件名爲Read.txt,當調用析構函數時,所有的字符串都保存到這個文件中。 該Read.txt文件包含一個列表作爲這樣:從文件中讀取,存儲到鏈表中,然後再打印到文件

HELLO 
MOM 
BART 
CART 
PETS 

下面是代碼:

StringList::StringList() 
{ 
    ifstream infile; 
    // i know how to open the file i just dont really have a single clue on how to set each string into the linked list 


} 

StringList::~StringList() 
{ 
    StringListNode *next; 
    for (StringListNode *sp = pTop; sp != 0; sp = next) 
    { 
     next = sp->pNext; 
     delete sp; 
    } 
} 

任何建議或示例,將不勝感激。如果你需要更多的信息或者我寫的代碼,請儘快告訴我。

+0

如果你真的想持久存儲,爲什麼不使用[數據庫?(http://sqlite.org/) –

+0

不要你只是想打電話給你的add()方法爲每個找到字符串在字符串存儲文件中,例如Read.txt? – CXJ

回答

3

這是我的建議。希望能幫助你。

StringListNode *cur = pTop; // I guess pTop is the head of your list 
for each string s // read 
{ 
    cur = new StringListNode(s); // call the constructor of StringListNode 
    cur = cur->pNext; 
} 
+0

讓我開始!謝謝! – WestonBuckeye

0

這裏有一些代碼來完成你想要的。對於閱讀,你應該在輸入文件流上有一個while循環,直到不能再讀取更多的字符串。使用已經寫好的add函數添加每個字符串。然後爲了銷燬,你應該打開一個文件流並相應地保存列表中的每個元素。


StringList::StringList() { 
    ifstream ifs("MyFilename.txt"); 
    string s; 
    while(ifs >> s) 
     Add(s); 
} 

StringList::~StringList() { 
    ofstream ofs("MyFilename.txt"); 
    StringListNode *next; 
    for (StringListNode *sp = pTop; sp != 0; sp = next) 
    { 
     ofs << sp->element << endl; 
     next = sp->pNext; 
     delete sp; 
    } 
} 
+0

你假設每個元素都沒有空格。在while循環中優先使用'std :: getline()'運算符>>'。沖洗每條線是非常低效的。比'std :: endl'優先''n''。 –

相關問題