1

我创建了一个邻接链接列表来显示城市之间的航班。该程序从 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  
4

1 回答 1

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;
}
于 2013-04-26T17:30:42.280 回答