Я создал связанный список смежности, чтобы показать рейсы между городами. Программа читает из 2 файлов, один содержит названия городов, а другой — источник и пункт назначения различных рейсов. Я создал массив для обслуживаемых городов и связанный список соединяющих городов для каждого индекса города массива. Однако у меня возникли проблемы с распечаткой списка. Мой выход выглядит так:
Origin -- Dest --- Flight No. -- Price
NYC --- Chicago -- 3123 ---- 123
NYC ---- Miami ---- 2123 ---- 543
NYC ---- Seattle --- 9283 ---- 243
Я хочу знать, смогу ли я распечатать город происхождения только один раз.
Вот мой код для структуры и других вещей:
struct flight
{
int fNumber;
string source;
string dest;
int price;
}
оператор перегрузки для вывода
p.source
это происхождение, p.dest
это пункт назначения и так далее
ostream& operator<<(ostream & os, const flight & p)
{
os <<"From "<< p.source << " to: ";
int diff=0;
diff= 35- p.source.length();
os << fixed<< setw(diff)<<right<< p.dest;
os << setw(10)<<right<<p.fNumber;
os << setw(10)<<right<<p.price;
return os;
}
и функция отображения
void flightMap::display()
{
cout<<setw(15)<<"Origin "<<setw(30)<<"Destination"<<setw(12)<<"Flight "<<setw(13) <<"Price "<<endl;
cout<<"================================================================="<<endl;
for (int i=0; i<number; i++)
{
flightRecord[i].display();
}
}
Я хочу, чтобы мой вывод выглядел так
Origin Dest Flight No. Price
NYC Chicago 3123 123
---- Miami 2123 543
---- Seattle 9283 243
Вы можете сделать это, но это, вероятно, требует небольшой реорганизации вашего кода. Первое, что должно измениться, это
ostream& operator<<(ostream & os, const flight & p)
Это стандартный способ печати, но здесь он недостаточно хорош, потому что нет способа сообщить этой функции, печатать город-источник или нет. Итак, давайте напишем другую функцию
void printFlight(ostream & os, const flight & p, bool printSource)
{
if (printSource)
os <<"From "<< p.source << " to: ";
else
os <<"From --- to: ";
...
}
Теперь вы можете использовать эту функцию в своем цикле, если вы помните, каким был последний город источника, который вы напечатали. Если последний исходный город отличается от текущего исходного города, вы печатаете исходный город, в противном случае — нет. Что-то вроде этого
string lastSource = "";
for (int i=0; i<number; i++)
{
printFlight(cout, flightRecord[i], flightRecord[i].source != lastSource);
lastSource = flightRecord[i].source;
}
Других решений пока нет …