2016-03-17 75 views
-5

C++:加載函數,加載給定文本文件的競爭結果,通過修改兩個團隊的信息來分析每個競爭結果,如下所示: o如果團隊陣列中不存在團隊,請將團隊添加到團隊陣列中。 o如果球隊已經存在, 修改球隊數據
如果球隊贏得比賽,則將總勝率提高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 
+0

我們不會免費做你的功課。 – xaxxon

+3

由於堆棧溢出不是一種編碼服務,因此我正在投票關閉此題目作爲題外話題。 – MikeCAT

+0

我已經嘗試了很多,但從未能夠運行代碼。 – sun98510

回答

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(STD map和multimap完成後是自-sorting):

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); 
+0

我只是想將這些團隊和他們的分數存儲在不同的數組中,例如 – sun98510

+0

您可以使用數組而不是地圖,但是您需要額外的功能:例如按團隊名稱搜索。 – ZDF