Сортировать елементы структуры за алфавитом
Всем привет,есть структура FOOTBALL ,нужно сортировать елементы структуры за алфавитом названий команд и соотвественно чтобы другие елементы тоже менялись местами.
#include <iostream>
#include <iomanip>
#include <string.h>
#include <cstring>
using namespace std;
struct FOOTBALL{
char NAME[20];
char COUNTRY[20];
int BALL[20];
};
void input(int n,FOOTBALL *TURNIR){
for(int i = 0;i < n ;i++){
cin.ignore();
cout << endl << "Team:";
gets(TURNIR[i].NAME);
cout << endl << "Country:";
gets(TURNIR[i].COUNTRY);
cout << endl << "Ball:";
cin >> TURNIR[i].BALL[1];
}
}
void output(int n,FOOTBALL *TURNIR){
for(int i = 0; i < n;i++){
int counter = 1;
cout << counter << "." << " " << TURNIR[i].NAME << "\t";
cout << TURNIR[i].COUNTRY << "\t";
cout << TURNIR[i].BALL[1] << endl;
counter++;
}
}
void sort(int n, FOOTBALL *TURNIR){
}
int main(){
setlocale(LC_ALL, "Ukrainian");
int n;
cout << "Enter n:";
cin >> n;
FOOTBALL *TURNIR = new FOOTBALL[n];
input(n,TURNIR);
output(n,TURNIR);
delete[] TURNIR;
}
Можете подсказать как написать функцию sort?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
У вас С++, так что воспользуемся стандартной функцией sort из стандартной библиотеки. Надо только описать компаратор
bool COMPARE(const FOOTBALL& a, const FOOTBALL& b)
{
if (strcmp(a.NAME,b.NAME) < 0) return true;
if (strcmp(a.COUNTRY,b.COUNTRY) < 0) return true;
return a.BALL[1] < b.BALL[1]; // Тут уж сами решите, как сравнивать,
// я для простоты сравниваю только второе значение - которое
// вы вводите в программе
}
и после этого ваша функция примет вид
void sort(int n, FOOTBALL * TURNIR)
{
sort(TURNIR, TURNIR + n, COMPARE);
}
Всё. Остальной код программы не смотрел, так что какие там ошибки — не знаю.
В самом вопросе... По-русски пишут элемент, по алфавиту. Запятые тут расставляются примерно так же, как и в украинском.