StrUtil.cpp

Go to the documentation of this file.
00001 
00008 
00009 //
00010 // Utilities for std::string
00011 // defined in namespace strutil
00012 // by James Fancy
00013 //
00015 
00016 #include "strutil.h"
00017 
00018 #include <algorithm>
00019 
00020 namespace strutil {
00021 
00022     using namespace std;
00023 
00024     string trimLeft(const string& str) {
00025         string t = str;
00026         t.erase(0, t.find_first_not_of(" \t\n\r"));
00027         return t;
00028     }
00029 
00030     string trimRight(const string& str) {
00031         string t = str;
00032         t.erase(t.find_last_not_of(" \t\n\r") + 1);
00033         return t;
00034     }
00035 
00036     string trim(const string& str) {
00037         string t = str;
00038         t.erase(0, t.find_first_not_of(" \t\n\r"));
00039         t.erase(t.find_last_not_of(" \t\n\r") + 1);
00040         return t;
00041     }
00042 
00043    string trim(const string& str, const string & delimitor) {
00044         string t = str;
00045         t.erase(0, t.find_first_not_of(delimitor));
00046         t.erase(t.find_last_not_of(delimitor) + 1);
00047         return t;
00048     }
00049 
00050         string toLower(const string& str) {
00051         string t = str;
00052         transform(t.begin(), t.end(), t.begin(), tolower);
00053         return t;
00054     }
00055 
00056     string toUpper(const string& str) {
00057         string t = str;
00058         transform(t.begin(), t.end(), t.begin(), toupper);
00059         return t;
00060     }
00061 
00062     bool startsWith(const string& str, const string& substr) {
00063         return str.find(substr) == 0;
00064     }
00065 
00066     bool endsWith(const string& str, const string& substr) {
00067         return str.rfind(substr) == (str.length() - substr.length());
00068     }
00069 
00070     bool equalsIgnoreCase(const string& str1, const string& str2) {
00071         return toLower(str1) == toLower(str2);
00072     }
00073 
00074     template<bool>
00075     bool parseString(const std::string& str) {
00076         bool value;
00077         std::istringstream iss(str);
00078         iss >> boolalpha >> value;
00079         return value;
00080     }
00081 
00082     string toString(const bool& value) {
00083         ostringstream oss;
00084         oss << boolalpha << value;
00085         return oss.str();
00086     }
00087 
00088     vector<string> split(const string& str, const string& delimiters) {
00089         vector<string> ss;
00090 
00091         Tokenizer tokenizer(str, delimiters);
00092         while (tokenizer.nextToken()) {
00093             ss.push_back(tokenizer.getToken());
00094         }
00095 
00096         return ss;
00097     }
00098 
00099 }
00100 
00101 namespace strutil {
00102 
00103     const string Tokenizer::DEFAULT_DELIMITERS("  ");
00104 
00105     Tokenizer::Tokenizer(const std::string& str)
00106         : m_String(str), m_Offset(0), m_Delimiters(DEFAULT_DELIMITERS) {}
00107 
00108     Tokenizer::Tokenizer(const std::string& str, const std::string& delimiters)
00109         : m_String(str), m_Offset(0), m_Delimiters(delimiters) {}
00110 
00111     bool Tokenizer::nextToken() {
00112         return nextToken(m_Delimiters);
00113     }
00114 
00115     bool Tokenizer::nextToken(const std::string& delimiters) {
00116         // find the start charater of the next token.
00117         size_t i = m_String.find_first_not_of(delimiters, m_Offset);
00118         if (i == string::npos) {
00119             m_Offset = m_String.length();
00120             return false;
00121         }
00122 
00123         // find the end of the token.
00124         size_t j = m_String.find_first_of(delimiters, i);
00125         if (j == string::npos) {
00126             m_Token = m_String.substr(i);
00127             m_Offset = m_String.length();
00128             return true;
00129         }
00130 
00131         // to intercept the token and save current position
00132         m_Token = m_String.substr(i, j - i);
00133         m_Offset = j;
00134         return true;
00135     }
00136 
00137     const string Tokenizer::getToken() const {
00138         return m_Token;
00139     }
00140 
00141     void Tokenizer::reset() {
00142         m_Offset = 0;
00143     }
00144 
00145 }
00146 
00147 /*
00148 struct string_token_iterator 
00149   : public std::iterator<std::input_iterator_tag, std::string>
00150 {
00151 public:
00152     string_token_iterator() : str(0), start(0), end(0) {}
00153     string_token_iterator(const std::string & str_, const char * separator_ = " ") :
00154     separator(separator_),
00155     str(&str_),
00156     end(0)
00157     {
00158       find_next();
00159     }
00160     string_token_iterator(const string_token_iterator & rhs) :
00161     separator(rhs.separator),
00162     str(rhs.str),
00163     start(rhs.start),
00164     end(rhs.end)
00165   {
00166   }
00167 
00168   string_token_iterator & operator++()
00169   {
00170     find_next();
00171     return *this;
00172   }
00173 
00174   string_token_iterator operator++(int)
00175   {
00176     string_token_iterator temp(*this);
00177     ++(*this);
00178     return temp;
00179   }
00180 
00181   std::string operator*() const
00182   {
00183     return std::string(*str, start, end - start);
00184   }
00185 
00186   bool operator==(const string_token_iterator & rhs) const
00187   {
00188     return (rhs.str == str && rhs.start == start && rhs.end == end);
00189   }
00190 
00191   bool operator!=(const string_token_iterator & rhs) const
00192   {
00193     return !(rhs == *this);
00194   }
00195 
00196 private:
00197 
00198   void find_next(void)
00199   {
00200     start = str->find_first_not_of(separator, end);
00201     if(start == std::string::npos)
00202     {
00203       start = end = 0;
00204       str = 0;
00205       return;
00206     }
00207 
00208     end = str->find_first_of(separator, start);
00209   }
00210 
00211   const char * separator;
00212   const std::string * str;
00213   std::string::size_type start;
00214   std::string::size_type end;
00215 };
00216 */
 All Classes Namespaces Files Functions Variables Typedefs Enumerator Defines