2015-11-29 51 views
0

希望你能幫上忙。我有另一個項目要做,而且我有點卡住了。對於這個項目,我們正在製作一個簡單的Rock,Paper,Scissors遊戲。除了所需的高分功能外,我幾乎爲此設置了一切。教授希望我們按照最高得分排列前三名的高分。並排排列一個字符串數組和一個Int數組

我如何設置我的代碼是我有2個獨立的數組,highscore []和highscoreNames []。我需要弄清楚如何將highscore []從最大到最小的排序,同時也保留highscoreNames []與他們的分數配對的名字。

感謝您的幫助,如果您需要更多的信息請教!

回答

0

最簡單的方法是使用一個容器的高分數和高分名稱:

struct High_Score_Info 
{ 
    unsigned int score; 
    std::string name; 
}; 

//... 
std::vector<High_Score_Info> scores; 

這將允許你在排序過程中保持成績和名字聯繫在一起。

編輯1:
如果您不允許使用結構,你需要編寫自己的排序例程。當你移動得分數組中的項目時,還會移動名稱數組的相同項目(相同索引)。

0

結構是一個更好的方法來做到這一點。雖然只是用指標也可以幫助,分揀分數和在兩個陣列交換:

for(i = 1; (i <= numLength); i++) 
    { 
      for (j=0; j < (numLength -1); j++) 
     { 
       if (highscore[j+1] > highscore[j])  
       { 
        int temp = highscore[j];    
        highscore[j] = highscore[j+1]; 
        highscore[j+1] = temp; 
        string tempName = highscoreNames[j];    
        highscoreNames[j] = highscoreNames[j+1]; 
        highscoreNames[j+1] = temp; 

       } 
      } 
    } 
+0

您好,感謝您的快速響應,這看起來像最有可能與我的代碼一起工作的人。無論如何,變量numLength來自哪裏?它是我的數組的大小?對不起,如果它是一個愚蠢的問題,我仍然是非常新的C++ – harrisoncrazy

+0

是的,它的大小,如果數組 – nullpointer

+0

好吧,所以出於某種原因,使用它時,它會拋出一個錯誤消息與文本彈出:未處理的異常在0x00F98A16 Assign2 .exe:0xC0000005:訪問衝突寫入位置0x00000000。任何想法爲什麼? – harrisoncrazy

0

您可以創建一個正式的配對數據結構,就像一個@Thomas曾建議,或者您也可以創建第三個包含排序分數的單元的數組。這樣您就不需要實際重新排序數據數組。例如,它可能是這樣的:

highscore = {5, 2, 4, 1, 6}; 
highscoreNames = {"a", "b", "c", "d", "e"}; 
sortedIndeces = {4, 0, 2, 1, 3}; 

然後,你只需簡單地使用sortedIndeces索引。

for (int i = 0; i < 5; i++) { 
    highscore[sortedIndeces[i]]; //6, 5, 4, 2, 1 
    highscoreNames[sortedIndeces[i]]; //e, a, c, b, d 
}