przejście do zawartości
zpr c++ quick reference
Narzędzia użytkownika
Zarejestruj się!
Zaloguj
Narzędzia witryny
Narzędzia
Pokaż stronę
Poprzednie wersje
Odnośniki
Ostatnie zmiany
Menadżer multimediów
Indeks
Zaloguj
Zarejestruj się!
Ostatnie zmiany
Menadżer multimediów
Indeks
Ślad:
tokenizer
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Biblioteka boost Tokenizer ====== Biblioteka boost Tokenizer zapewnia elastyczny i łatwy w użyciu mechanizm dzielenia dowolnych łańcuchów znakowych na serię podciągów (tokens), grup znaków o podanych cechach. Biblioteka umożliwia wybór metody podziału łańcucha poprzez parametryzowane funktory TokenizerFunction. ===== Klasa Tokenizer ===== Powyższa klasa umożliwia widok na sekwencję znaków jak na kontener zawierający podciągi. Dostęp do podciągów zawartych w takim kontenerze zapewniony jest za pomocą iteratorów zdefiniowanych w bibliotece. Klasa tokenizer jest klasą szablonową pozwalającą tworzyć obiekty dzielące sekwencje znakowe określonego typu według określonego sposobu podziału. Warto zauważyć,że podany łańcuch znakowy nie jest dzielony w czasie inicjalizacj obiektu, lecz na żądanie. <code cpp> template < class TokenizerFunc = char_delimiters_separator<char>, class Iterator = std::string::const_iterator, class Type = std::string > class tokenizer </code> Parametry szablonu: * TokenizerFunc - funktor używany do dzielenia sekwencji * Iterator - typ iteratora specyfikującego sekwencję * Type - typ sekwencji\\ \\ Prosty przykład użycia biblioteki: <code cpp> #include<iostream> #include<boost/tokenizer.hpp> #include<string> using namespace std; using namespace boost; string str = "To jest, prosty przyklad"; int main(){ //utorzenie domyślnego obiektu klasy tokenizer, w którym ciąg znaków string //dzielony jest na podstawie odstępów i znaków interpunkcyjnych tokenizer<> t(s); //dostęp do pojedyńczych tokenówjest realizowany przy użyciu iteratorów for(tokenizer<>::iterator beg=t.begin(); beg!=t.end();++beg){ cout << *beg << "\n"; } } </code> Wynikiem działania programu będzie sekwencja: <code cpp> To jest prosty przyklad </code> Lista konstruktorów oraz funkcji składowych <code cpp> //konstuktory tokenizer(Iterator first, Iterator last,const TokenizerFunc& f = TokenizerFunc()) template<class Container> tokenizer(const Container& c,const TokenizerFunc& f = TokenizerFunc()) //fukcja zmieniająca iteratory wskazujące na początek i za koniec sekwencji na nowe void assign(Iterator first, Iterator last) //fukcja zmieniająca iteratory wskazujące na początek i za koniec sekwencji oraz funkce podziału na nowe void assign(Iterator first, Iterator last, const TokenizerFunc& f) //fukcja zmieniająca kontener przechowujący sekwencję na nowy template<class Container> void assign(const Container& c) //fukcja zmieniająca kontener przechowujący sekwencję oraz funkcję podziału na nowe template<class Container> void assign(const Container& c, const TokenizerFunc& f) //iterator wskazujący na pierwszy podciąg iterator begin() const //iterator wskazujący za ostatni podciąg iterator end() const /* c - kontener zawierający sekwencję do podziału * f - funktor służący do podziału sekwencji * first - iteraor wskazujący na początek dzielonej sekwencji * last - iteraor wskazujący za dzieloną sekwencję */ </code> ===== Klasa Token Iterator ===== Klasa zapewnia dostęp do podciągów dzielonej sekwencji jak przzy użyciu zeykłego iteratora. <code cpp> template < class TokenizerFunc = char_delimiters_separator<char>, class Iterator = std::string::const_iterator, class Type = std::string > class token_iterator_generator </code> Parametry szablonu: * TokenizerFunc - funktor używany do dzielenia sekwencji * Iterator - typ iteratora specyfikującego sekwencję * Type - typ sekwencji\\ \\ W celu utorzenia iteratora musimy podać iterator wskazujący na początek dzielonej sekwencji ''begin'', interator wskazujący dokładnie za dzieloną sekwencję ''end'' oraz funkcję podziału sekwencji ''fun''. <code cpp> template<class Type, class Iterator, class TokenizerFunc> typename token_iterator_generator<TokenizerFunc,Iterator,Type>::type make_token_iterator(Iterator begin, Iterator end,const TokenizerFunc& fun) </code> \\ Przykład użycia orzy wykorzystaniu funktora offset_separator dzielącego łańcuch znakowy na podciągi o określonej długości. <code cpp> #include<iostream> #include<boost/token_iterator.hpp> #include<string> int main(){ using namespace std; using namespace boost; string s = "12252001"; int offsets[] = {2,2,4}; offset_separator f(offsets, offsets+3); typedef token_iterator_generator<offset_separator>::type Iter; Iter beg = make_token_iterator<string>(s.begin(),s.end(),f); Iter end = make_token_iterator<string>(s.end(),s.end(),f); for(;beg!=end;++beg){ cout << *beg << "\n"; } } </code> ===== Funktory TokenizerFunction ===== TokenizerFunction jest funktorem, którego zadaniem jest dzielenie podanej sekwencji znaków dopóki zostanie znaleziony dokładnie jeden podciąg lub osiągnięty koniec sekwencji. Następnie uaktualnia podciąg i informuje o położeniu w sekwencji elementu znajdującgo się dokładnie za za znalezionym podciągiem.\\ Biblioteka zawiera trzy klasy funktorów TokenizerFunction: * char_separator * escaped_list_separator * offset_separator\\ \\ ==== Klasa char_separator ==== ---- ==== Klasa escaped_list_separator ==== ---- ==== Klasa offset_separator ====
tokenizer.1208006873.txt.gz
· ostatnio zmienione: 2008/04/12 15:27 przez
mplacht1
Narzędzia strony
Pokaż stronę
Poprzednie wersje
Odnośniki
Do góry