c++stringalgorithm

Splitting a string by a character


I would simply like to split a string into an array using a character as the split delimiter. (Much like the C#'s famous .Split() function. I can of course apply the brute-force approach but I wonder if there anything better than that.

So far the I've searched and probably the closest solution approach is the usage of strtok(), however due to it's inconvenience(converting your string to a char array etc.) I do not like using it. Is there any easier way to implement this?

Note: I wanted to emphasize this because people might ask "How come brute-force doesn't work". My brute-force solution was to create a loop, and use the substr() function inside. However since it requires the starting point and the length, it fails when I want to split a date. Because user might enter it as 7/12/2012 or 07/3/2011, where I can really tell the length before calculating the next location of '/' delimiter.


Solution

  • Using vectors, strings and stringstream. A tad cumbersome but it does the trick.

    #include <string>
    #include <vector>
    #include <sstream>
    
    std::stringstream test("this_is_a_test_string");
    std::string segment;
    std::vector<std::string> seglist;
    
    while(std::getline(test, segment, '_'))
    {
       seglist.push_back(segment);
    }
    

    Which results in a vector with the same contents as

    std::vector<std::string> seglist{ "this", "is", "a", "test", "string" };