2016-07-09 7 views
-1

ファーストをオフに使用していない私はC++に新しいですので、何かを知っているか、正しくないされていないために私をマークダウンいけません。私は私のC++プログラムに読み込もうとしているファイルを持っています。私はプロジェクトの練習をしています。私は作成してオブジェクトを作成しなければならず、各インスタンスが7つの変数を含むファイルの1行を表示します。このファイルにはデータベースが含まれています。テキストファイルの形式は次のとおりです。入力ファイルと異なる種類のデータ及びベクター

// String String Character Int Int Char Int 
// String String Character Int Int Char Int 
// etc. 

正確に350のデータメンバーがあります。それ以上のことはありません。だから私は配列を使用しています。 このプロジェクトには、指定されていないベクターは使用できません。

配列のみを使用して、このアプローチする最良の方法は何ですか?私はそれが内容をオフに印刷することを試みたときに

 for (int l = 0; l < max_size; l++) { 
      myfile >> myintarray[l]; 
     } 
     for (int k = 0; k < max_size; k++) { 
      myfile >> mychararray[k]; 
     } 
     for (int i = 0; i < max_size; i++) { 
      myfile >> myarray[i]; 
      // print artists and title; 
     } 

     // Then I have to put it the object. Store as such.... 
     myloop = 0; 
     a = 2; 
     b = 5; 
     while (myloop < 50) { 
      myartwork[myloop].setRoom(mychararray[b]); 
      myartwork[myloop].myart.setMeduim(mychararray[a]); 
      a += 7; 
      b += 7; 
      myloop += 1; 
     } 
     // more code where I do the same thing with characters 
     // same things with strings..... 

私の最初の試みは、3つの配列を作成することでした。それはincorectだった。とジャンボジャンボ。 だから私はそれが文字を取ることができないすべての番号の配列を格納しようとしていると私は、エラーを印刷していると思いますか?それが正しいかどうかはわかりません。

だから、文字列だった配列を1つだけ使用しようとしましたが、各文字列をchar型またはint型に変換しました。それは痛みで、私は間違いがあります。キャラクタータイプのハンドリング方法がわかりません。

  myloop = 0; 
      a = 3; 
      b = 4; 
      c = 6; 
      while (myloop < 50) { 
       //std::stoi (str_dec,&sz) 
       std::string::size_type sz; 

       // my object (instance). data......Try to convert this. 
       myartwork[myloop].mymysize.setLength(std::stoi(myarray[a], &sz)); 
       myartwork[myloop].mymysize.setWidth(std::stoi(myarray[b], &sz)); 
       myartwork[myloop].setPrice(std::stoi(myarray[c], &sz)); 
       a += 7; 
       b += 7; 
       c += 7; 
       myloop += 1; 
      } 

これを行うには、これらの2つの方法がありますか?正しい軌道にいるのですか?同じ容量で多くの配列を使用して

+0

_ "私はベクトルを使用できません" _。 'std :: deque'を使ってください。または 'std :: list' –

答えて

0

は通常、貧しいデザインのサインです。

ここでモデリングをお話しましょう。フィールドのコンテナとしてレコードを定義しましょう。レコードは、ファイル内の1つのテキスト行に対応します。だから、モデルは:

#define MAXIMUM_RECORDS (350) 
Record database[MAXIMUM_RECORDS]; 

行うにはいくつかのより多くの事:

struct Record 
{ 
    std::string s1; 
    std::string s2; 
    char  c1; 
    int   i1; 
    int   i2; 
    char  c1; 
    int   i3; 
}; 

今、あなたは、テーブル、またはレコードの配列を宣言することができます読んで

  1. 過負荷operator >>を入力ファイルから。
  2. コンストラクタ、コピーコンストラクタ、および代入演算子を実装します。
  3. オーバーロード比較演算子:==,>など
  4. オーバーロードoperator <<レコードを印刷します。
関連する問題