2013-04-26 97 views
1

我创建了一个邻接链表来显示城市之间的航班。该程序从2个文件中读取,一个包含城市名称,另一个包含不同航班的来源和目的地。我为服务的城市创建了一个数组,并为该数组的每个城市索引创建了一个连接城市的链接列表。但是,我无法打印出列表。我出来放如下:邻接链表C++显示

Origin -- Dest  ---  Flight No. --  Price 

NYC ---   Chicago --  3123 ----    123 
NYC ----  Miami ----  2123  ----   543  
NYC   ----  Seattle ---  9283  ----  243 

我想知道我是否可以打印出起点城市一次。

这里是我的结构和其他的东西代码:输出 p.source

struct flight 
{ 
     int fNumber; 
     string source; 
     string dest; 
     int price;  
} 

超负荷运营商为原点,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 

回答

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; 
} 
+0

非常感谢约翰的东西,还有我删除“从p.source”从我的重载运算符<<,这样只会显示最后3个变量,然后我通过创建一个最后源使用您的意见我的循环中的城市,完美地工作,再次感谢! – 2013-04-26 19:02:32