]> git.mxchange.org Git - simgear.git/commitdiff
string list joining, and a test case for that and splitting.
authorJames Turner <zakalawe@mac.com>
Thu, 20 Oct 2011 10:12:54 +0000 (11:12 +0100)
committerJames Turner <zakalawe@mac.com>
Thu, 20 Oct 2011 10:12:54 +0000 (11:12 +0100)
simgear/misc/strutils.cxx
simgear/misc/strutils.hxx
simgear/misc/strutils_test.cxx

index 5a669a6b0f51655e14cde98925f5d8636b984700..b1f74318eb60279689959a6dffc08ddfadd7ee72 100644 (file)
@@ -278,6 +278,19 @@ namespace simgear {
         return v1parts.size() - v2parts.size();
     }
     
+    string join(const string_list& l, const string& joinWith)
+    {
+        string result;
+        unsigned int count = l.size();
+        for (unsigned int i=0; i < count; ++i) {
+            result += l[i];
+            if (i < (count - 1)) {
+                result += joinWith;
+            }
+        }
+        
+        return result;
+    }
     
     } // end namespace strutils
     
index 091ba8239393231a96cd95e8462683e1ffa53530..9bd1dbe1851fc20637cb8a5829cb32de05691e26 100644 (file)
@@ -33,6 +33,7 @@
 #include <vector>
 #include <cstdlib>
 
+typedef std::vector < std::string > string_list;
 
 namespace simgear {
   namespace strutils {
@@ -93,11 +94,17 @@ namespace simgear {
         * resulting in at most maxsplit+1 words.
         * @return Array of words.
         */
-       std::vector<std::string>
+       string_list
        split( const std::string& s,
               const char* sep = 0,
               int maxsplit = 0 );
 
+       /**
+        * create a single string by joining the elements of a list with
+        * another string.
+        */
+       std::string join(const string_list& l, const std::string& joinWith = "");
+
        /**
         * Test if a string starts with a string 
         *
index 8369f4ea76be36442cdc9d298d4f870a6f7a07e9..6387b47cc88ff5e74f42cf3163a0f8648feca226 100644 (file)
@@ -63,6 +63,20 @@ int main (int ac, char ** av)
 // since we compare numerically, leasing zeros shouldn't matter
     VERIFY(compare_versions("0.06.7", "0.6.07") == 0);
     
+    string_list la = split("zero one two three four five");
+    COMPARE(la[2], "two");
+    COMPARE(la[5], "five");
+    COMPARE(la.size(), 6);
+    
+    string_list lb = split("alpha:beta:gamma:delta", ":", 2);
+    COMPARE(lb.size(), 3);
+    COMPARE(lb[0], "alpha");
+    COMPARE(lb[1], "beta");
+    COMPARE(lb[2], "gamma:delta");
+    
+    std::string j = join(la, "&");
+    COMPARE(j, "zero&one&two&three&four&five");
+    
     cout << "all tests passed successfully!" << endl;
     return 0;
 }