Ответ:
int main()
{
train* arrayOfTrain[5]; // создается массив указателей на объекты train
// в следующем цикле у пользователя запрашивается заполнение пяти объектов train
for (int i = 0; i < 5; i++)
{
string punkt;
int trainNumber;
Time startTime;
cin >> punkt; // ввод пункта
cin >> trainNumber; // ввод номера поезда
cin >> startTime; // ввод времени
// в следующей строке выделяется память под объект train, ему присваиваются введенные данные
arrayOfTrain[i] = new train(punkt, trainNumber, startTime);
}
// сортировка массива по длине названия пункта назначения
// ( функция strcmp сравнивает длины строк )
for (int i = 0; i < 5 - 1; i++)
for (int j = i + 1; j < 5; j++) {
if (strcmp(arrayOfTrain[i]->punkt.c_str(), arrayOfTrain[j]->punkt.c_str()) > 0)
{
swap(arrayOfTrain[i], arrayOfTrain[j]);
}
}
// сортировка элементов с одинаковой длиной названия пункта назначения по времени отправления
for (int i = 0; i < 5 - 1; i++)
for (int j = i + 1; j < 5; j++) {
if (strcmp(arrayOfTrain[i]->punkt.c_str(), arrayOfTrain[j]->punkt.c_str()) == 0)
{
if (arrayOfTrain[i]->startTime.m_hours > arrayOfTrain[j]->startTime.m_hours)
swap(arrayOfTrain[i], arrayOfTrain[j]);
if (arrayOfTrain[i]->startTime.m_hours == arrayOfTrain[j]->startTime.m_hours)
if (arrayOfTrain[i]->startTime.m_minutes > arrayOfTrain[j]->startTime.m_minutes)
swap(arrayOfTrain[i], arrayOfTrain[j]);
}
}
// вывод массива на экран
for (int i = 0; i < 5; i++)
{
cout << arrayOfTrain[i]->punkt << " " << arrayOfTrain[i]->trainNumber << " " << arrayOfTrain[i]->startTime
}
system("pause");
return 0;
}