Improved tokenizeString
[libdai.git] / src / util.cpp
index 5a79380..f4b7adb 100644 (file)
@@ -102,6 +102,31 @@ int rnd_int( int min, int max ) {
     return (int)floor(_uni_rnd() * (max + 1 - min) + min);
 }
 
+std::vector<std::string> tokenizeString( const std::string& s, bool singleDelim, const std::string& delim ) {
+    using namespace std;
+    vector<string> tokens;
+
+    string::size_type start = 0;
+    while( start < s.size() ) {
+        string::size_type end = s.find_first_of( delim, start );
+        if( end == string::npos )
+            end = s.size();
+
+        if( end == start && !singleDelim ) {
+            // skip to next non-delimiter
+            start = s.find_first_not_of( delim, start );
+            if( start == string::npos )
+                start = s.size();
+        } else { // we found a token
+            tokens.push_back( s.substr(start, end - start) );
+            start = end + 1;
+        }
+    }
+
+    return tokens;
+}
+
+
 void tokenizeString(const std::string& s, std::vector<std::string>& outTokens, const std::string& delim) {
     size_t start = 0;
     while (start < s.size()) {
@@ -113,4 +138,5 @@ void tokenizeString(const std::string& s, std::vector<std::string>& outTokens, c
     }
 }
 
+
 } // end of namespace dai