2016-05-30 123 views
1

我需要從文件讀取類對象,但我不知道如何。從文件讀取類對象C++

在這裏,我有一個類「人」

class People{ 
public: 

string name; 
string surname; 
int years; 
private: 

People(string a, string b, int c): 
name(a),surname(b),years(c){} 
}; 

現在我想讀txt文件人民,並將它們存儲到一個階層的人的對象。

舉例來說,這是我的.txt文件看起來像:

John Snow 32 
Arya Stark 19 
Hodor Hodor 55 
Ned Stark 00 

我認爲這樣做將創建4個對象數組的最佳方式。我需要逐字逐字讀一遍,如果我假設正確但我不知道如何......

+2

使用'STD: :ifstream' + std :: getline來讀取每一行,而std :: stringstream來解析每一行。 – marcinj

+0

我認爲在這種情況下用'operator >>'讀入會更容易 – Curious

回答

3

要做到這一點的方法是組成你的類的存儲格式,例如,如果我被做到這一點,我將存儲就像你一樣

John Snow 32 
Arya Stark 19 
Hodor Hodor 55 
Ned Stark 00 

要在你讀這可以做到以下幾點

ifstream fin; 
fin.open("input.txt"); 
if (!fin) { 
    cerr << "Error in opening the file" << endl; 
    return 1; // if this is main 
} 

vector<People> people; 
People temp; 
while (fin >> temp.name >> temp.surname >> temp.years) { 
    people.push_back(temp); 
} 

// now print the information you read in 
for (const auto& person : people) { 
    cout << person.name << ' ' << person.surname << ' ' << person.years << endl; 
} 

把它寫到你可以做以下

一個文件中的信息
static const char* const FILENAME_PEOPLE = "people.txt"; 
ofstream fout; 
fout.open(FILENAME_PEOPLE); // be sure that the argument is a c string 
if (!fout) { 
    cerr << "Error in opening the output file" << endl; 

    // again only if this is main, chain return codes or throw an exception otherwise 
    return 1; 
} 

// form the vector of people here ... 
// .. 
// .. 

for (const auto& person : people) { 
    fout << people.name << ' ' << people.surname << ' ' << people.years << '\n'; 
} 

如果您不熟悉vectorvector是推薦的方法來存儲可以在C++中動態增長的對象數組。 vector類是C++標準庫的一部分。而且,由於您正在從文件中讀取數據,因此您不應該對提前將多少個對象存儲在文件中進行任何假設。

但是,以防萬一你不熟悉我在上面的例子中使用的類和功能。這裏有一些鏈接

矢量http://en.cppreference.com/w/cpp/container/vector

ifstream的http://en.cppreference.com/w/cpp/io/basic_ifstream

一系列基於for循環http://en.cppreference.com/w/cpp/language/range-for

汽車http://en.cppreference.com/w/cpp/language/auto