2014-03-05 89 views
0

我有一個程序在txt文件中讀取並打印出文件中的所有行。 我用一個鏈接結構來做到這一點。 代碼:將鏈接結構寫入類

#include <string> 
struct ListNode{ 
std::string item; 
int count; 
ListNode* link; 
}; 

#include <iostream> 
#include <fstream> 

int main(){ 
char filename[] = "src/inputdata"; 
std::cout << " Reading from file: " << filename << " . . . "; 

std::ifstream in(filename); 
if (in.fail()){ 
    std::cout << " ... not able to read it! Exiting." << std::endl; 
    return -1; 
} 
std::cout << " ... OK, file opened." << std::endl << std::endl; 

ListNode* first = new ListNode(); 
ListNode* p = first; 
int count = 1; 

while (!in.eof()){ 

     getline(in, p->item); 

     p->count = count++; 

     p->link = new ListNode(); 

     p = p->link; 
} 

count = 1; 

p = first; 

    while (count <= p->count) 

    { 

    p->count = count++; 

    std::cout << p->count << ": " << p->item << std::endl; 

    p = p->link; 

    } 
     } 

要求是這個程序轉換成3個文件,驅動程序,主CPP文件和頭文件。我對C++很陌生。我已經設置了頭文件如下,但我想我錯過一些東西,也許getter和setter ...

頭文件

//ListNode.h 
#ifndef LISTNODE_H_ 
#define LISTNODE_H_ 
using namespace std; 
#include <iostream> 

class ListNode{ 
public: 
ListNode(); 
virtual ~MyData(); 

private: 
string item; 
int count; 
ListNode* link; 
}; 
#endif /* LISTNODE_H_ */ 

我應該怎麼做與其他兩個文件? 欣賞你的答案。感謝您現在

回答

0

爲你使用類..

在類

class ListNode 
{ 
.... 
     ListNode* CreateList(); 
.... 
}; 

這確實讀取文件,並創建列表的操作創建一個方法;同樣你main()

在做什麼,包括ListNode.h文件中ListNode.cpp和提供的定義,以聲明該方法ListNode

cpp文件

#include "ListNode.h" 
.... //remaining code 

終於在第三檔main.cpp。包括 「ListNode.h」

#include"ListNode.h" 
...//code.. 

在main方法創建ListNode類的對象,做你想做的事

+0

我應該在createlist()中做些什麼? – user3339506

+0

讀取文件並創建列表... – HadeS

+0

以'main()'中的方式執行相同的操作。 '返回頭指針... ... :-) ..試試看..如果你需要幫助評論.. – HadeS

0

頭文件操作(.H):

//ListNode.h 
#ifndef LISTNODE_H_ 
#define LISTNODE_H_ 
#include <string> 
using namespace std; 

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

     // Accessor functions. 
     string const& getItem() const; 
     int getCount() const; 
     ListNode* getLink() const; 

     // Modifier functions. 
     void setItem(string const& i); 
     void setCount(int c); 
     void setLink(ListNode* l); 

    private: 
     string item; 
     int count; 
     ListNode* link; 
}; 
#endif /* LISTNODE_H_ */ 

實施文件(.CC):

// ListNode.cc 
#include "ListNode.h" 

ListNode::ListNode() : count(0), link(NULL) {} 

ListNode::~ListNode() {} 

string const& ListNode::getItem() const 
{ 
    return item; 
} 

int ListNode::getCount() const 
{ 
    return count; 
} 

ListNode* ListNode::getLink() const 
{ 
    return link; 
} 

void ListNode::setItem(string const& i) 
{ 
    item = i; 
} 

void ListNode::setCount(int c) 
{ 
    count = c; 
} 

void ListNode::setLink(ListNode* l) 
{ 
    link = l; 
} 

main.cc:

// main.cc 
#include <iostream> 
#include <fstream> 
#include "ListNode.h" 

int main() 
{ 
    char filename[] = "src/inputdata"; 
    std::cout << " Reading from file: " << filename << " . . . "; 

    std::ifstream in(filename); 
    if (in.fail()){ 
     std::cout << " ... not able to read it! Exiting." << std::endl; 
     return -1; 
    } 
    std::cout << " ... OK, file opened." << std::endl << std::endl; 

    ListNode* first = new ListNode(); 
    ListNode* p = first; 
    int count = 1; 

    while (!in.eof()){ 

     string item; 
     getline(in, item); 
     p->setItem(item); 
     p->setCount(count++); 

     p->setLink(new ListNode()); 

     p = p->getLink(); 
    } 

    count = 1; 

    p = first; 

    while (count <= p->getCount()) 

    { 
     p->setCount(count++); 

     std::cout << p->getCount() << ": " << p->getItem() << std::endl; 

     p = p->getLink(); 
    } 
} 
+0

謝謝:)我試了6個小時....我錯過了getter方法,並試圖直接訪問數據...難怪它沒有工作 – user3339506