Сортировка в алфавитному порядку

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
romanu416
Сообщения: 6
Зарегистрирован: 29 окт 2013, 02:04

В программу вписываешь данные о странах а она и должна сортировать страны по афавиту и тогда их виводити.але как сделать сортировку я не знаю.поможить пожалуйста.

В void TComputer::Perevirka() должно сортировать страни в алфавитному порядку
я не знаю как сделать.

Код: Выделить всё

#include <iostream.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>

using namespace std;

class TComputer
{
	char country[20];
	float area;
	int people;
	char neighboring_countries[60];
	int life;
public:
	TComputer();
	TComputer(char*,float,int,char*,int);
	~TComputer();
	void Show();
	void Set();
	void Perevirka();

};

TComputer::TComputer()
{
	cout <<"Створили обєкт\n";
}
TComputer::TComputer(char* country,float area,int people,char* neighboring_countries,int life)
{
	strcpy(this->country,country);
	this->area=area;
	this->people=people;
	strcpy(this->neighboring_countries,neighboring_countries);
	this->life=life;	
	cout <<"Створили обєкт\n";
}

TComputer::~TComputer()
{
	cout <<"Видалили обєкт\n";
}

void TComputer::Show()
{
	cout<<"Назва країни - "<<country<<endl;
	cout<<"Площа - "<<area<<endl;
	cout<<"Кiлькiсть населення - "<<people<<endl;
	cout<<"Сусідні країни - "<<neighboring_countries<<endl;
	cout<<"Середня тривалість життя - "<<life<<endl;
	cout<<endl;
}

void TComputer::Set()
{
	cout<<"Назва країни - ";
	cin>>country;
	cout<<"Площа - ";
	cin>>area;
	cout<<"Кiлькiсть населення - ";
	cin>>people;
	cout<<"Сусідні країни - ";
	cin>>neighboring_countries;
	cout<<"Середня тривалість життя - ";
	cin>>life;
	cout<<endl;

}
void TComputer::Perevirka()
{
		this->Show();
}



int main()
{	
    setlocale(LC_ALL, "Ukrainian");
	system("color F1");
	TComputer o("Австрія",8768,38,"Угорщина, Чехія, Швейцарія, Німечинна",60);
	o.Show();
	TComputer comp[6];
	for (int i=0;i<6;i++){
		comp[i].Set();}
	int hdd,ram;
	cout<<"Сортування в алфавітному порядку \n";
	cout<<endl;
	for (int i=0;i<6;i++)
		comp[i].Perevirka();
	o.Perevirka();
	system("pause");
	return 0;
}
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Методе Perevirka это не самое удачное, точнее совсем плохое место для сортировки. Дело в том, что сортировка должна иметь доступ ко всем элементам массива, которые нужно выставить в необходимом порядке, а внутри метода Perevirka мы имеет доступ только к текущему элементу.

Правильным будет следующий подход. В классе нужно объявить оператор < для сравнения с другим экземпляром такого же класса.

Код: Выделить всё

bool TComputer: :o perator < (const TComputer& right)
{
   return (strcmp(country, right.country) < 0);
}
И ещё нам потребуется определить оператор присваивания (его реализация оставляю в качестве "домашнего задания").

После всего этого к массиву объектов можно будет применить стандартный алгорит std::sort из хедера algorithm.

Код: Выделить всё

std::sort(comp, comp+6);
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить