从文件中读取结果数据,加载,比较并打印显示

时间:2016-03-17 07:09:44

标签: c++

C ++:一个加载函数,用于加载来自给定文本文件的竞争结果,通过修改两个团队的信息来分析每个竞争结果,如下所示:  o如果Team数组中不存在团队,请在Team数组中添加团队。 o如果团队已经存在,  通过
修改团队的数据 如果球队赢得比赛,将总胜利增加1; 如果球队失败,则将总损失增加1; 将团队得分与总分相加;
将对手队伍得分与总得分相加。

•排序功能,根据总胜利按降序对球队进行排序。如果总获胜时间相同,则比较总损失时间越少越好。如果总赢和总损失时间相同,则比较总得分与总得分的差异,越大越好。排序算法取决于你。

•打印功能打印出团队记录以进行筛选。

###############输出必须是这样的
Input a basketball competition results' file name: results.txt
Shellharbour      10 0 471 100
Raptors           6 5 227 257
Bobcats           6 5 178 225
Spurs             6 6 275 270
MTSO Warriors     5 7 234 273
Mavericks         1 11 159 419

**和文本文件中的数据是: - **

Shellharbour:MTSO Warriors
50:21
Spurs:Bobcats
23:28
Raptors:Mavericks
37:12
Spurs:MTSO Warriors
20:12
Mavericks:Bobcats
20:26
Raptors:MTSO Warriors
16:26
Raptors:Shellharbour
9:50
Spurs:Mavericks
24:15
Bobcats:MTSO Warriors
21:12
Spurs:MTSO Warriors
17:26
Mavericks:Shellharbour
10:64
Raptors:Mavericks
32:14
Bobcats:Spurs
2:20
Mavericks:MTSO Warriors
8:48
Shellharbour:Bobcats
44:6
Raptors:Spurs
27:17
Mavericks:Bobcats
8:26
MTSO Warriors:Raptors
16:26
Spurs:Shellharbour
14:39
Mavericks:Spurs
20:53
Raptors:Shellharbour
9:30
MTSO Warriors:Bobcats
18:13
Raptors:Bobcats
16:13
Shellharbour:Mavericks
58:5
MTSO Warriors:Spurs
11:18
Mavericks:Raptors
18:22
Bobcats:Spurs
22:18
MTSO Warriors:Shellharbour
5:61
Spurs:Raptors
34:26
Mavericks:MTSO Warriors
16:12
Shellharbour:Bobcats
33:4
Bobcats:Mavericks
17:13
MTSO Warriors:Raptors
27:7
Shellharbour:Spurs
42:17

1 个答案:

答案 0 :(得分:0)

解决方案取决于您允许使用的内容。既然您说可以使用std,以下是一些可能对您有帮助的观察结果:

定义result结构以保存两个团队的名称和分数。添加read方法:

struct result_type
{

  std::string n1, n2;
  int s1, s2;

  std::istream& read( std::istream& is )
  {
    // use getline...
    return is;
  }

};

我在输出示例中看到了五列。每列必须是结构中的字段。定义一个类来存储这些列。添加update方法和write方法:

struct team_type
{
  std::string name;
  int total_win;
  // more fields...

  void update( result_type& r )
  {
    // ...
  }

  std::ostream& write( std::ostream& os )
  {
    os << name;
    // ...
    return os;
  }

};

团队必须存储在Team Name to Team Info map中(您应该阅读std::map,否则您将无法理解正在发生的事情。)

typedef std::map< std::string, team_type > team_name_to_team_type;

阅读结果并更新上面地图中存储的团队:

ifstream is( "input.txt" );
if ( !is )
  return -1;

team_name_to_team_type teams;
result_type r;
while ( r.read( is ) )
{
  teams[r.n1].update( r );
  teams[r.n2].update( r );
}

完成阅读后,您应该将结果存储在Total Win to Team Info multimap中(标准地图和多地图是自我排序的):

typedef std::multimap< int, team_type > total_win_to_team_type;

total_win_to_team_type sorted_teams;
for ( team_name_to_team_type::const_iterator i = teams.begin(); i != teams.end(); ++i )
  sorted_teams[i->second.total_win] = *i;

并显示它:

for ( total_win_to_team_type::const_iterator i = sorted_teams.begin(); i != sorted_teams.end(); ++i )
  i->second.write( std::cout );