我创建了一个邻接链表来显示城市之间的航班。该程序从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
答案 0 :(得分:2)
您可以这样做,但可能需要对代码进行一些重组。首先要改变的是这个
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;
}