2015-11-29 38 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 
}