2013-04-26 98 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