2

我正在尝试从一天中的多个时间点获取带有“股市行情”的文本文件。

IE

代码价格
HPQ 121
MSFT 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 130
DJIA 96
等。

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 回答