Go to the documentation of this file.00001
00008
00009
00010
00011
00012
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
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
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
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
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216