2015-05-17 3 views
0

У меня возникла проблема с какой-то работой в школе, где мне нужно создать два массива для имен и один для оценки, который позволяет пользователю вводить данные в оба массива (т. Е. Введите имя игроков:; введите счет игроков :). Затем мне нужно распечатать массивы по убыванию, а затем по возрастанию в алфавитном порядке. В качестве подсказки нам сказали: Используя функцию сортировки строк, объедините два массива в один, затем отсортированный.Есть ли способ связать ввод двух разных массивов?

Однако я не могу понять, как связать два значения друг с другом, чтобы, если я вхожу в Натан со счетом 87, два значения не могут быть разделены.

Это то, что я до сих пор (с некоторыми вещами я пытался заставить работать, но не мог):

#include <iostream> 
#include <string> 
#include <algorithm> 
using namespace std; 

int main() 
{ 
    string names[10]; 
    int scores[10]; 
    string combine[20]; 
    int count = 0; 

    while (count < 10){ 
     cout << "Please enter a player's name: "; 
     cin >> names[count]; 
     cout << "Now enter that player's score: "; 
     cin >> scores[count]; 

     count++; 

    } 
    /*sort(begin(names), end(names)); 
    sort(begin(scores), end(scores));*/ 

    for (int i = 0; i < 10; i++){ 
     cout << names[i] << ": " << scores[i] << "\n"; 
    } 
    system("pause"); 
} 
+0

Это звучит очень нечетко (не нетипично задавать вопросы). Что такое «функция сортировки строк»? Вам изначально сказали использовать два отдельных массива или вы могли бы создать один массив, содержащий объекты 'struct'? – Galik

+0

Ни один из моих учителей не может дать достойные инструкции, когда дело доходит до того, что они хотят от вас (я нахожу это очень раздражающим), но вот скриншот фактической страницы: http://prntscr.com/76f6xh – HypeFree

ответ

0

Вы хотите «ссылку» их с самого начала:

struct Student { 
    string name; 
    int score; 

    bool operator<(const Student& rhs) const { 
     return score > rhs.score || (score == rhs.score && name < rhs.name); 
    } 
}; 

Таким образом, вид легко:

sort(begin(students), end(students)); 

в противном случае, вы должны сделать массив индексов:

int indices[10]; 
std::iota(begin(indices), end(indices), 0); 

И сортировать, что:

std::sort(begin(indices), end(indices), [&](int a, int b){ 
    return scores[a] > scores[b] || 
      scores[a] == scores[b] && names[a] < names[b]; 
}); 

А затем распечатайте по показателям:

for (int idx : indices) { 
    std::cout << names[idx] << " with score " << scores[idx] << '\n'; 
} 
+0

Пропустил это. Тогда ты хороший. –

0

Насколько объединение двух массивов в один вы можете сделать что-то вроде этого:

// create a struct that of type "result" 
// that combines both name and score 
struct result 
{ 
    string name; 
    int score; 
}; 

int main() 
{ 
    string names[10]; 
    int scores[10]; 

    // array of your struct - same number of elements (10 not 20) 
    result combine[10]; 

    int count = 0; 

    while (count < 10){ 
     cout << "Please enter a player's name: "; 
     cin >> names[count]; 
     cout << "Now enter that player's score: "; 
     cin >> scores[count]; 

     count++; 

    } 
    /*sort(begin(names), end(names)); 
    sort(begin(scores), end(scores));*/ 

    for (int i = 0; i < 10; i++){ 
     cout << names[i] << ": " << scores[i] << "\n"; 
    } 

    // combine into one array 
    for(int i = 0; i < 10; ++i) 
    { 
     combine[i].name = names[i]; 
     combine[i].score = scores[i]; 
    } 

    // Now sort the combined array 

    system("pause"); 
} 
Смежные вопросы