Test
Dependencies: X_NUCLEO_IHM01A1
Tokenizer.h@3:24ab1c8fefef, 2019-12-29 (annotated)
- Committer:
- jackcassa1967
- Date:
- Sun Dec 29 18:36:23 2019 +0000
- Revision:
- 3:24ab1c8fefef
Start
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jackcassa1967 | 3:24ab1c8fefef | 1 | /////////////////////////////////////////////////////////////////////////////// |
jackcassa1967 | 3:24ab1c8fefef | 2 | // Tokenizer.h |
jackcassa1967 | 3:24ab1c8fefef | 3 | // =========== |
jackcassa1967 | 3:24ab1c8fefef | 4 | // General purpose string tokenizer (C++ string version) |
jackcassa1967 | 3:24ab1c8fefef | 5 | // |
jackcassa1967 | 3:24ab1c8fefef | 6 | // The default delimiters are space(" "), tab(\t, \v), newline(\n), |
jackcassa1967 | 3:24ab1c8fefef | 7 | // carriage return(\r), and form feed(\f). |
jackcassa1967 | 3:24ab1c8fefef | 8 | // If you want to use different delimiters, then use setDelimiter() to override |
jackcassa1967 | 3:24ab1c8fefef | 9 | // the delimiters. Note that the delimiter string can hold multiple characters. |
jackcassa1967 | 3:24ab1c8fefef | 10 | // |
jackcassa1967 | 3:24ab1c8fefef | 11 | // AUTHOR: Song Ho Ahn (song.ahn@gmail.com) |
jackcassa1967 | 3:24ab1c8fefef | 12 | // CREATED: 2005-05-25 |
jackcassa1967 | 3:24ab1c8fefef | 13 | // UPDATED: 2011-03-08 |
jackcassa1967 | 3:24ab1c8fefef | 14 | /////////////////////////////////////////////////////////////////////////////// |
jackcassa1967 | 3:24ab1c8fefef | 15 | |
jackcassa1967 | 3:24ab1c8fefef | 16 | #ifndef TOKENIZER_H |
jackcassa1967 | 3:24ab1c8fefef | 17 | #define TOKENIZER_H |
jackcassa1967 | 3:24ab1c8fefef | 18 | |
jackcassa1967 | 3:24ab1c8fefef | 19 | #include <string> |
jackcassa1967 | 3:24ab1c8fefef | 20 | #include <vector> |
jackcassa1967 | 3:24ab1c8fefef | 21 | |
jackcassa1967 | 3:24ab1c8fefef | 22 | // default delimiter string (space, tab, newline, carriage return, form feed) |
jackcassa1967 | 3:24ab1c8fefef | 23 | const std::string DEFAULT_DELIMITER = " \t\v\n\r\f"; |
jackcassa1967 | 3:24ab1c8fefef | 24 | |
jackcassa1967 | 3:24ab1c8fefef | 25 | class Tokenizer |
jackcassa1967 | 3:24ab1c8fefef | 26 | { |
jackcassa1967 | 3:24ab1c8fefef | 27 | public: |
jackcassa1967 | 3:24ab1c8fefef | 28 | // ctor/dtor |
jackcassa1967 | 3:24ab1c8fefef | 29 | Tokenizer(); |
jackcassa1967 | 3:24ab1c8fefef | 30 | Tokenizer(const std::string& str, const std::string& delimiter=DEFAULT_DELIMITER); |
jackcassa1967 | 3:24ab1c8fefef | 31 | ~Tokenizer(); |
jackcassa1967 | 3:24ab1c8fefef | 32 | |
jackcassa1967 | 3:24ab1c8fefef | 33 | // set string and delimiter |
jackcassa1967 | 3:24ab1c8fefef | 34 | void set(const std::string& str, const std::string& delimiter=DEFAULT_DELIMITER); |
jackcassa1967 | 3:24ab1c8fefef | 35 | void setString(const std::string& str); // set source string only |
jackcassa1967 | 3:24ab1c8fefef | 36 | void setDelimiter(const std::string& delimiter); // set delimiter string only |
jackcassa1967 | 3:24ab1c8fefef | 37 | |
jackcassa1967 | 3:24ab1c8fefef | 38 | std::string next(); // return the next token, return "" if it ends |
jackcassa1967 | 3:24ab1c8fefef | 39 | |
jackcassa1967 | 3:24ab1c8fefef | 40 | std::vector<std::string> split(); // return array of tokens from current cursor |
jackcassa1967 | 3:24ab1c8fefef | 41 | |
jackcassa1967 | 3:24ab1c8fefef | 42 | protected: |
jackcassa1967 | 3:24ab1c8fefef | 43 | |
jackcassa1967 | 3:24ab1c8fefef | 44 | |
jackcassa1967 | 3:24ab1c8fefef | 45 | private: |
jackcassa1967 | 3:24ab1c8fefef | 46 | void skipDelimiter(); // ignore leading delimiters |
jackcassa1967 | 3:24ab1c8fefef | 47 | bool isDelimiter(char c); // check if the current char is delimiter |
jackcassa1967 | 3:24ab1c8fefef | 48 | |
jackcassa1967 | 3:24ab1c8fefef | 49 | std::string buffer; // input string |
jackcassa1967 | 3:24ab1c8fefef | 50 | std::string token; // output string |
jackcassa1967 | 3:24ab1c8fefef | 51 | std::string delimiter; // delimiter string |
jackcassa1967 | 3:24ab1c8fefef | 52 | std::string::const_iterator currPos; // string iterator pointing the current position |
jackcassa1967 | 3:24ab1c8fefef | 53 | |
jackcassa1967 | 3:24ab1c8fefef | 54 | }; |
jackcassa1967 | 3:24ab1c8fefef | 55 | |
jackcassa1967 | 3:24ab1c8fefef | 56 | #endif // TOKENIZER_H |