2014-12-30 166 views
-1

我遇到了一個問題,我收到了一個文件,其中包含不同的城市和道路,我做了一個名爲Ville(法語城市)的課程和一個名爲Route(Road in French)的課程,需要把我所有的威樂到市政廳和我的所有路線的載體導入路線的vectof從字符串中創建對象(C++)

威樂構造函數被調用那樣:

Ville *myCity = new Ville("myCity"); 

和道路構造:

Route *myRoad = new Road("myRoad",400, 130, myCity1, myCity2); 

參數a重新命名道路名稱,大小,最高速度以及與道路相連的兩個城市。

文件的樣子:

< ville> 

    Paris 
    Berlin 
    ... 
< /ville> 
< route> 
    A0 400 130 Paris Berlin 
    ... 
</route> 

我這樣做了數據提取:

std::string element; 
    int statut = 0; 
    while(fichier >> element) 
    { 
     if(element == "</ville>" || element == "</route>") 
     { 
      statut = 0; 
      fichier >> element; 
     } 
     if(element == "<ville>" || statut == 1) 
     { 
      if(statut == 0) 
      { 
       fichier >> element; 
      } 
      cout << "Ville: " << element << endl; 
      statut = 1; 
     } 
     if(element == "<route>" || statut == 2) 
     { 
      if(statut == 0) 
      { 
       fichier >> element; 
      } 
      cout << "Route: " << element; 
      fichier >> element; 
      cout << " Taille: " << element; 
      statut = 1; 
      fichier >> element; 
      cout << " Speed: " << element; 
      fichier >> element; 
      cout << " Relie: " << element; 
      fichier >> element; 
      cout << " à " << element <<endl; 
      statut = 2; 
     } 
    } 
    } 
    else 
    { 
     cout << "Error: Can't open the file" << endl; 
    } 

我在尋找,讓我這樣做的方法:

Ville *element = new Ville (element); 

或者我應該改變提取數據的方式,以便輕鬆轉換爲對象嗎?

+0

我不明白這個問題。如果你可以做'新Vill​​e(「myCity」)','element'是一個字符串,你只需要'new Ville(element.c_str())'? – Barry

+0

你在尋找XML解析器嗎? http://stackoverflow.com/questions/9387610/what-xml-parser-should-i-use-in-c或http://lars.ruoff.free.fr/xmlcpp/ btw。糾正你的最後一行 - 你使用元素的兩個不同的東西 – Palo

+0

我是按目的做的,我期待這樣做,因爲可變城市將具有與城市本身相同的名稱。 – mel

回答

0

好了,你無法直接在C++中做你想做的事情。有一點的一種解決方法,但:

您可以創建一個map<string, Ville*>,讓我們把它myCities:

然後,您可以從文件中讀出的「元素」,然後使用代碼中使用此地圖:

myCities[element] = new Ville(element); 

從這裏開始,您可以通過myCities["whichever city you want"]訪問您的物品。除此之外,我想不出一個簡單的方法來做到這一點,因爲C++不支持動態命名變量。

0

看來你需要一個std::map

std::map<string, Ville*> cities; 
std::vector<Route> roads; 

,您檢索城市數據:

cities[element] = new Ville(element); 

,並在那裏你獲取的道路數據

roads.push_back(Route(name, size, speed, 
         cities.at(cityName1), 
         cities.at(cityName2)));