2017-01-18 3 views
-2

さまざまな都市の気温を含むファイルを毎週、曜日ごとに読み込むプログラムを作成しようとしています。それが測定された曜日とそれが測定された都市に沿って出力します。
ファイルは、このような形式は次のとおりです。混合入力(文字列/浮動小数点)を同じ行に読み込んで配列に格納する

M
ニューヨーク-5.3
ダラス8.5
ファーゴ-1.3
T
ニューヨーク-3.3
ダラス5.2
ファーゴ-3.6
W
...

私が抱えている問題は、週の名前だけの行のために配列に入力して格納してください。また、いくつかの行にはニューヨークの都市があり、その間に空白があるため、>>演算子を連結することはできません。私はこの問題を数日間苦しんできました。
これは初心者のコースですので、助けを借りて心に留めておいてください:私はスクランブルすることができた小さなコードを投稿します。それほど多くはないし、うまくいきません。

#include <iostream> 
#include <string> 
#include <fstream> 
#include <sstream> 
using namespace std; 
int main() 
{ 
    string line; 
    ifstream infile("temps.txt"); 
    float numbers[30] = { 0.0 }; 
    int count = 1; 
    istringstream iss(line); 
    string city; 
    float n; 


    while (getline(infile, line)) 
    { 
     if (count % 4 == 0) 
     { 

     } 
     else 
     { 
      iss >> city >> n; 
     } 
    } 
    for (int i = 0; i < 10; i++) 
    { 
     cout << numbers[i] << " "; 
    } 
} 
+0

ファイルは常に上記の形式ですか?常に「ニューヨーク」、「ダラス」、「ファーゴ」が続く平日です。他の都市もありますか?都市の数が変わることはありますか?あなたのプログラムは別のフォーマットのファイルを扱うことができますか? – Lehue

+0

そして構造体とベクトル/構造体の配列を扱うのは大丈夫でしょうか、それともできるだけシンプルに保つべきでしょうか? – Lehue

+0

そして別の質問:なぜ浮動小数点数[30]で30要素のサイズを選んだのですか? 3つの都市が毎週30の平日になるか、30の気温しかないので、10の平日ですか?またはファイルには1週間の情報しか含まれていませんか? – Lehue

答えて

1

あなたは文字列にファイルから行を得ているしたら、それは簡単です:

if(line.size() == 1) 
{ 
    // you have a day in line 
} 
else 
{ 
    // you have a <city + temperature>, let's parse 
    // the last space in line is always the one right before the temperature. Here is it's index. 
    int lastSpace = line.find_last_of(' '); 

    int temp = std::stoi(line.substr(lastSpace + 1, line.size())); 
    string cityName = line.substr(0, lastSpace); 
} 

あなたは文字列としてint型や都市名などの温度を得た後、あなたが保存することができますしかし、あなたは週の最高気温を得るために(配列、地図、リストなど)望みます。

関連する問題