diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2014-10-11 12:55:57 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2014-10-11 12:55:57 +0200 |
commit | def669f31e10c8192a16f6f6ebdf1ccd420b5fe5 (patch) | |
tree | d7506dc67235bd8245aad670f64d017b761aa05c | |
parent | c5351f58bcf494a56ecfd17fe5e68eb3b17dac7d (diff) | |
download | crawler-def669f31e10c8192a16f6f6ebdf1ccd420b5fe5.tar.gz crawler-def669f31e10c8192a16f6f6ebdf1ccd420b5fe5.tar.bz2 |
added a string splitting function (strtok-like)
-rw-r--r-- | include/util/StringUtils.hpp | 2 | ||||
-rw-r--r-- | src/libutil/StringUtils.cpp | 24 |
2 files changed, 26 insertions, 0 deletions
diff --git a/include/util/StringUtils.hpp b/include/util/StringUtils.hpp index d0c832e..af8e82f 100644 --- a/include/util/StringUtils.hpp +++ b/include/util/StringUtils.hpp @@ -2,9 +2,11 @@ #define __UTIL_STRING_UTILS_H #include <string> +#include <vector> #include "util/UtilExportable.hpp" UTIL_DLL_VISIBLE bool stringicasecmp( const std::string &s1, const std::string &s2 ); +UTIL_DLL_VISIBLE std::vector<std::string> split( const std::string &s, const std::string &delimiter, bool keepEmpty = true ); #endif diff --git a/src/libutil/StringUtils.cpp b/src/libutil/StringUtils.cpp index 61769c9..13be8d4 100644 --- a/src/libutil/StringUtils.cpp +++ b/src/libutil/StringUtils.cpp @@ -21,3 +21,27 @@ bool stringicasecmp( const string &s1, const string &s2 ) return false; } +std::vector<std::string> split( const string &s, const string &delimiter, bool keepEmpty ) +{ + vector<string> result; + + if( delimiter.empty( ) ) { + result.push_back( s ); + return result; + } + + string::const_iterator b = s.begin( ), e; + while( true ) { + e = search( b, s.end( ), delimiter.begin( ), delimiter.end( ) ); + string tmp( b, e ); + if( keepEmpty || !tmp.empty( ) ) { + result.push_back( tmp ); + } + if( e == s.end( ) ) { + break; + } + b = e + delimiter.size( ); + } + + return result; +} |