0,0 → 1,95 |
/* |
* Trida RNDFParser poskytuje metody ke zpracovani textoveho souboru ve |
* formatu RNDF definovaneho v soutezi Rotobour 2007 |
* |
* @author: Vasco |
* @date: Sat, 21 Jul 2007 15:56:28 +0200 |
* @version: 0.0.0 |
* |
*/ |
#include <iostream> |
#include <string> |
#include <map> |
#include <vector> |
#include <cctype> |
|
#ifdef DBG |
// vypisuje ladici hlaseni |
#include "rndf_dbg.cpp" |
#endif |
|
class RNDFParser { |
private: |
std::string rndfname; |
|
protected: |
/* funkce vezme retezec a rozlozi jej na slova, vraci vector<std::string> */ |
std::vector<std::string> toWord(const std::string& veta); |
|
public: |
RNDFParser(std::string name) { rndfname = name; } // konstruktor, ulozi jmeno souboru |
std::string rndfName() { return rndfname; } // vrati jmeno zpracovavaneho souboru |
std::map<double, double> parseSegment(int numSegment); // rozparsuje zadany segment cesty |
|
}; |
|
/** |
* @param veta retezec, ktery chceme rozlozit na slova |
* |
* Metoda vezme vstupni retezec a rozlozi jej na slova. Slovo zacina a konci libovolnym poctem |
* bilych znaku, veta konci s koncem retezce. Vysledna slova jsou ukladana do vector<string>, |
* ktery je nasledne vracen volajicimu. |
*/ |
std::vector<std::string> RNDFParser::toWord(const std::string& veta) { |
// definice vlastnich typu |
typedef std::string::size_type vel_vety; // velikost retezce |
|
// mistni promnene |
std::vector<std::string> slova; // sem se budou ukladat slova |
vel_vety i = 0; // velikost zadane vety |
|
#ifdef DBG |
// pro kontrolu vypiseme vetu |
echoDbg(veta); |
#endif |
|
// dokud nedojdeme na konec retezce |
while(i != veta.size()) { |
// jsou na zacatku mezery? preskoc je |
while(i != veta.size() && std::isspace(veta[i])) |
i++; |
|
// uloz pozici zacatku slova |
vel_vety j = i; // pomocny ukazatel v retezci |
|
// slovo, dokud nenarazime na dalsi mezeru |
while(j != veta.size() && !(std::isspace(veta[j]))) |
j++; |
|
// pokud se ve vete vyskytovaly slova |
if(i != j) { |
// vloz slovo do vectoru |
slova.push_back(veta.substr(i, j - i)); |
|
// opet ulozime pozici a jdem na dalsi slovo |
i = j; |
|
} |
} //end while |
|
return slova; |
} |
|
/* funkce main je jen pro testovaci ucely, prelozi se pouze s definovanym makrem 'DBG' */ |
#ifdef DBG |
int main(void) { |
|
std::cout << "PARSER:\tvypisuji RNDF soubor:" << std::endl; |
|
RNDFParser parser("RNDF_stromovka.txt"); |
std::cout << "PARSER:\tJmeno souboru je " << parser.rndfName() << std::endl; |
|
|
return 0; |
} |
#endif |