Add the split_first and split_last functions on strings.
authorNathan Binkert <binkertn@umich.edu>
Wed, 9 Feb 2005 18:46:23 +0000 (13:46 -0500)
committerNathan Binkert <binkertn@umich.edu>
Wed, 9 Feb 2005 18:46:23 +0000 (13:46 -0500)
base/str.cc:
base/str.hh:
    Add a couple functions that allow you to split a string at
    the first or last instance of a delimiter.

--HG--
extra : convert_revision : 2af22639e1b67ac61577c00475a555841a56f902

base/str.cc
base/str.hh

index dd8d800436f532c4ec45dfe39f7678ed1be30546..5357ba79f5145a4a4c86fca8933f0e71a56aae9f 100644 (file)
 
 using namespace std;
 
+bool
+split_first(const string &s, string &lhs, string &rhs, char c)
+{
+    string::size_type offset = s.find(c);
+    if (offset == string::npos) {
+        lhs = s;
+        rhs = "";
+        return false;
+    }
+
+    lhs = s.substr(0, offset);
+    rhs = s.substr(offset + 1);
+    return true;
+}
+
+bool
+split_last(const string &s, string &lhs, string &rhs, char c)
+{
+    string::size_type offset = s.rfind(c);
+    if (offset == string::npos) {
+        lhs = s;
+        rhs = "";
+        return false;
+    }
+
+    lhs = s.substr(0, offset);
+    rhs = s.substr(offset + 1);
+    return true;
+}
+
 void
 tokenize(vector<string>& v, const string &s, char token, bool ignore)
 {
index 812f4d41a87cc2fbdc3cb028211dbcb0257d9fc3..41433f2bd7716b923c74b36e527356da2bbd2b94 100644 (file)
@@ -90,6 +90,20 @@ to_lower(const std::string &s)
     return lower;
 }
 
+// Split the string s into lhs and rhs on the first occurence of the
+// character c.
+bool
+split_first(const std::string &s, std::string &lhs, std::string &rhs, char c);
+
+// Split the string s into lhs and rhs on the last occurence of the
+// character c.
+bool
+split_last(const std::string &s, std::string &lhs, std::string &rhs, char c);
+
+// Tokenize the string <s> splitting on the character <token>, and
+// place the result in the string vector <vector>.  If <ign> is true,
+// then empty result strings (due to trailing tokens, or consecutive
+// tokens) are skipped.
 void
 tokenize(std::vector<std::string> &vector, const std::string &s,
          char token, bool ign = true);