2016-12-20 115 views
-5

大家好,提前爲新手提問,但是我沒有找到任何與我的問題相關的話題。我有一個產品的文本文件,如下所示:將C++文本文件轉換爲數組。 (新手)

// No。 // //說明價格

100 Office_seat 102.99

200臺224.99

300 Computer_desk 45.49

400 Desk_Lamb 23.99

500書櫃89.49

我想讀它並將其保存在一個數組中,以後我將搜索Product_pin並計算總價格客戶購買。

嘗試了類似於我發佈的代碼,但我認爲我開始這一切都是錯誤的。我會很樂意提供任何建議。

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 


int main() 
{ 
    ifstream file("Proionta.txt"); 
    if(file.is_open()) 
    { 
     string myArray[15]; 
     for(int i=0;i<15;i++) 
     { 
      file>>myArray[i]; 

     } 
    } 
system ("pause"); 
} 

我應該嘗試做一個函數來將代碼放入它嗎?

+1

將流操作符用於'std :: string'不一定會給你所有的輸入行。如果這就是你想要的,我建議你看看['std :: getline'](http://en.cppreference.com/w/cpp/string/basic_string/getline)。 –

+2

_i認爲我開始一切都錯了。你覺得?你爲什麼這麼想?你能分享關於你面臨的問題的任何細節嗎?因爲這個問題目前還不清楚。 –

+0

我必須創建一個函數,它將讀取.txt文件中的數據並將其保存在數組中。之後,我必須做出第二個功能,它將搜索上面創建的數組中的產品代碼。我還必須創建一個課程,以增加每個客戶選擇的產品的價格並最終打印出來。 (這是一個課程項目)。 –

回答

1

讓我們從記錄建模的概念開始,然後得到原始的。

你想模型文本行作爲記錄

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
比方說,你不知道如何使用classstruct
每個字段可以單獨閱讀:

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一個很好的功能是,你可以像一個數組訪問,並在需要時它會自動增加運力。

+0

非常感謝您提出我的問題和您提供給我的信息。我會嘗試使用你提供給我的一些方法,並找出下一步該做什麼。 –