2016-12-20 12 views
-5

こんにちはみんな初心者の質問のために事前にsryが私の問題に特有のトピックは見つかりませんでした。私は以下のような製品のテキストファイルを持っています:配列へのC++テキストファイル。 (初心者)

//いいえ。 //説明//価格

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ファイルからデータを読み込んで配列に保存する関数を作成する必要があります。その後、上記で作成した配列の製品コードを検索する2番目の関数を作成する必要があります。また、各クライアントが選択して最終的に印刷する製品の価格を追加するクラスを作成する必要があります。 (これはクラスプロジェクト用です)。 –

答えて

1

レコードモデリングの概念から始めて、次にプリミティブを取得しましょう。

あなたはモデルにしたい記録としてテキスト行:次のステップはRecordためoperator>>をオーバーロードすることです

struct Record 
{ 
    unsigned int number; 
    std::string description; 
    double  price; 
}; 

:上記のコードを使用して

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:配列対ベクトル
多くの割り当ては、平均値や検索のような、データで何かをする必要が。これには、通常、データを保存する必要があります。
2つの一般的なコンテナ(学生の視点から)が配列で、std::vectorです。

ファイルI/Oでは、何レコードあるのか、容量が静的である(変化しない)ような配列なので決して良い配列ではありません。だから、自分のサイズを変更する実行する必要があります。std::vector

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 
    } 
} 

便利な機能を使用すると、配列のようにアクセスすることができ、必要に応じて、自動的に容量が増加することです。

+0

あなたが私の質問に入れてくれてありがとう、あなたが私に提供した情報をありがとう。私はあなたが私に提供した方法のいくつかを使って、次に何をするかを考えようとします。 –