需要帮助从数组中获取特定值并从最高到最低排序

时间:2017-06-14 19:54:34

标签: c++ arrays

我正在使用这些值:

8
9 5 7 -5 13 -4 11
7 5 -3 12 -5 17 -3
25 7 12 -3 5 -5 7 -5 3
14 5 12 -3 10 -7 8
5 1 -40
33 5 15 -5 9 -3 8
11 5 -12 8 -5 12 -3
13 5 3 -4 25 -5 3

第一个数字是球队中的篮球运动员数量,每一行的第一个数字是球员的球员号码,第二个数字是他在比赛期间坐在板凳上或在场上比赛的次数,其他数字是他打的时间(如果数字是正数)以及他坐在板凳上多久(如果数字是负数)。我需要做的是弄清楚哪5名球员开始比赛(如果连续的第3个数字是正数,则表示玩家开始了比赛)。然后我需要拿出开始比赛的球员的套件编号并从最低到最高排序。这是我的进步:

void skaitymas()
{
    int minnum = starters[0];
    ifstream fd ("u1.txt");
    fd >> n;
    for (int i = 0; i < n; i++){
        fd >> k[i] >> t;
        for (int j = 0; j < t; j++){
            fd >> zaidnez[j];
        }
        if (zaidnez[0]>0){
            // if I write cout << k[i]; here I get all the kit numbers but not in order
            starters[i] = k[i]; // here I'm trying to set the values to another array but it doesn't really work, I'm not sure how to do it properly.
        }
    }
    fd.close();
}

1 个答案:

答案 0 :(得分:0)

根据评论中的建议使用vector解决此问题。 请注意,我使用cin是为了方便起见,但您可以使用ifstream fd

进行同样的操作
#include <iostream>
#include <vector>
#include <sstream>
#include <limits>
using namespace std;

int main() {
    int n;
    cin >> n;
    cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    vector <vector <int> > players;
    for(int i=0; i<n; i++ )
    {
      vector <int> player;
      int val;
      std::string line;
      std::getline(cin, line);
      std::istringstream iss(line);
      while ( iss >> val) {    
        player.push_back(val);
      }
      players.push_back(player);
      if((player.size()>3)&&(player[2]>0))
      cout << player[0] << " ";
    }
    cout << endl;
    return 0;
}

所以在players中你有vector包含所有玩家(也是vector s)。然后,您可以使用std::sort对其进行排序。

Live Demo

输出:

  

9 25 14 33 13