2017-01-23 8 views
0

私のプログラムは、50を超えるプレーヤー統計情報を含まないテキストファイルから読み込む必要があります。入力の例は次のようになります。データの取得と解析

Chipper Jones 3B 0.303 
Rafael Furcal SS 0.281 
Hank Aaron RF 0.305 

私の問題は、私は各ライン内のデータを解析する方法を見つけ出すように見えることはできませんです。出力は次のようになりますように、私は、私はそれをするつもりだ方法を考え出す助けが必要:

私の目標は、ラインを解析し、任意の使用可能な回線を介して実行されますループのいくつかの並べ替えを作成することです
Jones, Chipper: 3B (0.303) 
Furcal, Rafael: SS (0.281) 
Aaron, Hank: RF (0.305) 

、各行の内容を関連する変数に設定します。

コード:

#include <iostream> 
#include <fstream> 
#include <string> 
#include <iomanip> 

using namespace std; 

class player 
{ 
private: 
    string first, last, position; 
    float batave; 
    int a; 

public: 
    void read(string input[50]); 
    void print_data(void); 

} playerinfo; 

void player::print_data(void) 
{ 
    cout << last << ", " << first << ": " << position << " (" << batave << ")" << endl; 
} 

void player::read(string input[]) // TAKE INFORMATION IN THE FILE AND STORE IN THE CLASS 
{ 
    for (int a = 0; a <= 50; a++); 
    { 
     // getline(input[0], first, ' ', last,); 
    } 

} 



int main(void) 
{ 
    ifstream infile; 
    string filename; 
    ofstream outfile; 
    string FILE[50]; 

    cin >> filename; 

    infile.open(filename.c_str()); 

    if (!infile) 
    { 
     cout << "We're sorry! The file specified is unavailable!" << endl; 
     return 0; 
    } 
    else 
    { 
     cout << "The file has been opened!" << endl; 

     for (int a = 0; getline(infile, FILE[a]); a++); 
     playerinfo.read(FILE); 
     playerinfo.print_data(); 

    } 
    printf("\n\n\n"); 
    system("pause"); 
} 

私は 入力と出力ファイル名のユーザーにプロンプ​​トを表示する必要があります。あなたのプログラムにファイル名をハードコードしないでください。 入力ファイルを開きます 各プレーヤーを読み込み、Playerオブジェクトの配列に格納します アレイ内のプレーヤー数を把握する 出力ファイルを開く アレイの各プレーヤーを出力ファイルに書き込み、割り当てによって必要とされる他の出力と一緒に表示されます。 完了したらファイルを閉じることを忘れないでください。

+0

はあなたがstringstream' '知っていますか? – Barmar

+0

いいえ。これはちょうどファイルを読み込んでそれを解析し、それをoutfileに送り返す基本的なC++プログラムであると考えられています。 –

答えて

0

入力の行には50個の文字列がありますが、1つだけはplayerinfoです。ファイルを読み取るための1つの文字列と、データを解析するための50 playerinfoがあります。

+0

私はちょっと混乱しています。私はメインのforループを持っています。ここでは、ファイルのすべての行を読み込み、その後、関数にファイルを送り、そこで解析することができます。関数内で解析する方法はありますか、これはあなたが意味するものですか? for(int a = 0; getline(infile、FILE [a]); a ++); \t \t playerinfo [50] .read(FILE); –

0

ストリームの抽出と挿入演算子のオーバーロードを使用します。たとえば、以下のコードを参照し、必要に応じて変更してください。

#include <iostream> 
using namespace std; 

class player { 
private: 
    string first, last, position; 
    float batave; 
    int a; 

public: 
    friend std::istream & operator>>(std::istream & in, player & p) { 
     in >> p.first >> p.last >> p.position >> p.batave; 
     return in; 
    } 

    friend std::ostream & operator<<(std::ostream & out, const player & p) { 
     out << p.last << ", " << p.first << ": " << p.position << " (" << p.batave << ")"; 
     return out; 
    } 
}; 

int main() { 
    player p; 
    while (cin >> p)   // or infile >> p; 
     cout << p << endl; // or outfile << p << endl; 
} 

DEMO

関連する問題