2017-07-06 5 views
0

からそうC++方法を読み取り、ストア値文

 
name1 arrival 20 service 20 
name2 arrival 22 service 11 
name3 arrival 23 service 40 

のようなものが含まれていると私はNAME1保存しようとしている入力ファイルがある、NAME2、文字列名でNAME3、 到着(20 、22,23)、intサービス中のサービス(20,11,40)を含む。 私はループとgetlineの間に使用しなければならないことは知っていますが、実際に何をすべきかわかりません。ありがとう

+0

**あなたが試したこと**を表示する必要があります。これはここで話題にはなりません。それはループを含んでいることを知っているので、そこから始めて、それをスケッチして、それを段階的に処理してください。 – tadman

+2

ループ内の['std :: getline'](http://en.cppreference.com/w/cpp/string/basic_string/getline)は良いスタートです。次に、他の入力ストリームと同様に動作する['std :: istringstream'](http://en.cppreference.com/w/cpp/io/basic_istringstream)を試してください(例えば、' std :: cin'など)あなたが望むフィールドを抽出する。次に、値をグループ化する*構造体(またはクラス)について読むことを検討してください。最後に、構造を格納する['std :: vector'](http://en.cppreference.com/w/cpp/container/vector)についてはどうでしょうか。 –

答えて

2

あなたのための簡単なサンプルプログラムをまとめました。基本的には、stringstreamを使用して、必要なデータ構造に格納することが必要になります。あなたが取り組んでいるアーキテクチャに基づいて特別なソリューションがあるかもしれませんが、うまくいけば、これがあなたを始めるでしょう。

std::string str = "name1 arrival 20 service 20\nname2 arrival 22 service 11\nname3 arrival 23 service 40"; 
    std::stringstream iss(str); 

    // Create temporary variable to store each line 
    std::string line; 

    // Data to hold each item 
    std::string name[3]; 
    int arrival[3]; 
    int service[3]; 
    std::string trash; // For throwing out data 

    // Read stream line by line 
    int index = 0; 
    while (getline(iss, line)) 
    { 
    // Parse the line 
    std::stringstream lineStream(line); 

    // Read each attribute into the appropriate data structure 
    lineStream >> name[index]; 
    lineStream >> trash; 
    lineStream >> arrival[index]; 
    lineStream >> trash; 
    lineStream >> service[index]; 

    // Increment index 
    ++index; 
    } 

    // Print out the results 
    for (int i = 0; i < 3; ++i) 
    { 
    std::cout << "Index[" << i << "]: " << name[i] 
       << ", " << arrival[i] << ", " << service[i] 
       << std::endl; 
    } 
関連する問題