2

1日の複数のポイントから取得した「株式市場のティッカー」を含むテキストファイルを取り込もうとしています。

IE

ティッカー価格HPQ121MSFT 76 X 133 EBAY 92 XOM 64 AAPL 141 DJIA 128 AAPL 130 ABC 139 ABC 102 DJIA 121
HPQ 121 DJIA 96 XOM 130 MSFT 132 HPQ 129 HPQ 71 GOOG 142 MSFT 67 X 70


















それらの値を取り込んで、重複を削除し、アルファベット順に終了値を表示する必要があります。これまでのところ私はこれを持っています...

 #include <iostream>
 #include <fstream>
 #include <string>
 #include <vector>
 #include <map>
 using namespace std;

 int main()
{
string filename;
map<string, int> string_count;
vector<string> market_list;

ifstream data_store;

//cout << "Enter stock file name to analyze" << endl;
//cin >> filename;

//data_store.open(filename.c_str());
data_store.open("stock1.txt");

while(!data_store.eof())
{
    string element;
    //data_store >> element;
    getline(data_store, element);
    //Remove ticker price from list
    if(element != "Ticker Price")
    {
        string_count[element]++;
    }
}
map<string, int>::iterator map_iter;
for(map_iter = string_count.begin(); map_iter != string_count.end(); map_iter++)
{
    market_list.push_back(map_iter->first);
}

data_store.close();

ofstream output_file;
output_file.open("stock_result.txt");

output_file << "Latest prices: " << endl;

vector<string>::iterator iter;
for (iter = market_list.begin(); iter != market_list.end(); iter++)
{
    string the_element = *iter;
    int num_times_repeated = string_count[the_element];
    for(int x = 0; x< num_times_repeated; x++)
    {
        output_file << the_element << endl;
    }
}

output_file.close();
}

これは、何も削除せずに、ファイルのすべての値をアルファベット順に出力します。これがなぜなのかは理解できますが、自分が望むものにこれを設定する方法を回避するのに苦労しています。覚えておいてください、私は学生なので、簡単な答えは望んでいません:)

編集

上記のリストをコードに取り込んで、各ティッカーの最終値である「クロージング」値を出力し、アルファベット順に表示したいと思います。

したがって、結果は次のようになります

最新の価格:
ABC 102
AAPL 130DJIA96
など

4

2 に答える 2

1

重複を削除するには、http://www.cplusplus.com/reference/stl/set/を参照してください。このコンテナは「一意の」値のみを格納します。したがって、重複が削除されます。

于 2012-10-18T04:04:14.013 に答える
1
std::map<std::string,int> stocks;
std::string symbol, line;
int value;
while (getline(data_store,line))
{
    std::istringstream iss(line);
    if (iss >> symbol >> value)
        stocks[symbol] = value;
}

次に、株式を反復処理します。

于 2012-10-18T04:36:47.833 に答える