2017-09-07 39 views
0

我有一個類似如下的文件:C++文件到矢量

C 0484758654 95 
C 0428473483 121 
T 0494569848 
C 0494569848 121 
//.. 30 or so more entries 

我想每一個「人」(通過自己的手機號碼錶示)存儲到一個對象。我知道我需要一個結構來存儲這讓我用一個Vector:

using namespace std; 
    int main() 
    { 
     ifstream fin; 
     fin.open("test.txt"); 
     vector<MonthlyPhoneBill> bill; 
     MonthlyPhoneBill temp; 
     while (fin >> temp.code>> temp.phoneNumber >> temp.data) 
      { 
       bill.push_back(temp); 
      } 

     for (const auto& temp : bill) { 
     cout << temp.code << ' ' << temp.phoneNumber << ' ' << temp.data << endl; 
    } 
     return 0; 
    } 

類:

class MonthlyPhoneBill { 

public: 
    MonthlyPhoneBill(); 
    int data; 
    int phoneNumber; 
    std::string code; 
    int totalBill; 
}; 

我有一對夫婦的問題然而,第一個問題是,當我將文件內容打印出來只打印第一行。

我的第二個問題是,我不知道現在怎麼樣,它的存儲在向量處理數據。例如,我想爲每個人計算帳單。我不知道如何訪問矢量的內容並做相應的計算。從個人檔案中可以多次出現,我不確定每次出現時如何增加總成本。

+1

我敢肯定你的代碼只打印前兩行,而不是文件中的第一行。守望着文件,並試圖找出什麼是對三線不同,那麼記住這個座右銘:「你告訴它做什麼只有一臺計算機做的,而不是你想要它做的」。記住這個座右銘之後,問問自己:在閱讀每一行時,你告訴計算機做什麼?現在,就訪問矢量的內容而言,這在C++書中有詳細解釋。你的C++書中有哪些特定的東西不清楚? –

回答

0

就像@Sam Varshavchik說的,看起來第三條線有什麼不同,因爲它確實不同 - 它缺少最後一個值,data成員。這導致while退出,因爲它執行的while (fin >> temp.code>> temp.phoneNumber >> temp.data)的最後部分時,即>> temp.data遇到任何數據。

至於第二個問題,又像@Sam Varshvchik說 - 請諮詢您的C++的書。您可以在任何操作中操作班級作品的矢量,就像打印內容時一樣。

計算每個人的總賬單在我看來,你的程序將需要發生一些變化。由於您的用戶在主矢量中重複使用,因此有一種方法是迭代遍歷它並將重複組合爲每個用戶的單個類對象以及總結賬單。另一種方法是通過電話號碼對用戶進行排序。一旦排序,您可以使用類似於Lippman's C++ Primer第7章中的方法。

0
struct MonthPhoneBill { 
    int data; 
    int phoneNumber; 
    std::string code; 
    int totalBill; 
}; 

int main() { 
    std::vector<MonthPhoneBill> dataEntry; 
    .... 
    .... 
    MonthPhoneBill temp; 
    // After Putting data into vector, one can simply access the data by. 
    while (fin >> temp.code>> temp.phoneNumber >> temp.data >> temp.totalBill) { 
      bill.push_back(temp); 
    } 

請記住文件的內容也應該是在格式像while循環,你要流式傳輸結構的所有內容。你不能錯過它,如果發生了其他所有的條目將被垃圾或可能導致代碼崩潰

auto temp0 = dataEntry[1].data; 
auto temp1 = dataEntry[1].phoneNumber; 
auto temp2 = dataEntry[1].code; 
    .... 
} 

你可以簡單地處理數據和訪問它。