讓我們從記錄建模的概念開始,然後得到原始的。
你想模型文本行作爲記錄:
struct Record
{
unsigned int number;
std::string description;
double price;
};
下一個步驟將是超載operator>>
爲Record
:
struct Record
{
unsigned int number;
std::string description;
double price;
friend std::istream& operator>>(std::istream& input, Record& r);
};
std::istream& operator>>(std::istream& input, Record& r)
{
input >> r.number >> r.description >> r.price;
return input;
}
使用上面的代碼,你可以在一個文件中讀取:
std::vector<Record> database;
Record r;
while (my_text_file >> r)
{
database.push_back(r);
}
編輯1:無struct
比方說,你不知道如何使用class
或struct
。
每個字段可以單獨閱讀:
unsigned int number;
std::string description;
double price;
while (my_text_file >> number >> description >> price)
{
// Do something with number, description, price
}
編輯2:數組與向量
許多任務需要你做一些與數據,如平均值或搜索。這通常需要您保存數據。
兩個受歡迎的容器(從學生的角度來看)是數組和std::vector
。
數組並不是一個好的選擇,因爲對於File I/O,你永遠無法確定有多少條記錄和數組像是靜態容量(永遠不會改變)。所以,你需要做的調整自己:
static const unsigned int initial_capacity = 16U;
Record database[initial_capacity];
unsigned int capacity = initial_capacity;
Record r;
unsigned int items_read = 0;
while (my_text_file >> r)
{
if (items_read < capacity)
{
database[items_read] = r;
++items_read;
}
else
{
// Allocate new, larger array
// Copy items from old array to larger array.
// Update capacity variable.
// Delete old array
// Change database pointer to new array
}
}
的std::vector
一個很好的功能是,你可以像一個數組訪問,並在需要時它會自動增加運力。
將流操作符用於'std :: string'不一定會給你所有的輸入行。如果這就是你想要的,我建議你看看['std :: getline'](http://en.cppreference.com/w/cpp/string/basic_string/getline)。 –
_i認爲我開始一切都錯了。你覺得?你爲什麼這麼想?你能分享關於你面臨的問題的任何細節嗎?因爲這個問題目前還不清楚。 –
我必須創建一個函數,它將讀取.txt文件中的數據並將其保存在數組中。之後,我必須做出第二個功能,它將搜索上面創建的數組中的產品代碼。我還必須創建一個課程,以增加每個客戶選擇的產品的價格並最終打印出來。 (這是一個課程項目)。 –