4

i am trying to split a string with 2 delimiters '+' and '-' in C++ using a string find a delimiter...

can anyone give me a go around...

Using

str.find(delimiter)

example :

a+b-c+d

Output Required: a b c d

Thanks in advance

rolling.stones
  • 496
  • 3
  • 9
  • 20

3 Answers3

14

Using std::string::substr and std::string::find

    std::vector<std::string> v ; //Use vector to add the words

    std::size_t prev_pos = 0, pos;
    while ((pos = str.find_first_of("+-", prev_pos)) != std::string::npos)
    {
        if (pos > prev_pos)
            v.push_back(str.substr(prev_pos, pos-prev_pos));
        prev_pos= pos+1;
    }
    if (prev_pos< str.length())
        v.push_back(str.substr(prev_pos, std::string::npos));

Or if you use boost it will be lot easier

#include <boost/algorithm/string.hpp>

std::vector<std::string> v;
boost::split(v, line, boost::is_any_of("+-"));
P0W
  • 46,614
  • 9
  • 72
  • 119
  • 1
    @rolling.stones The first part of the answer is the variant *without* boost. Ignore the second part in your case. – Appleshell Oct 05 '13 at 21:03
  • I am stil not able to use vector / get the splitted output of the code you've mentioned :( – rolling.stones Oct 05 '13 at 21:10
  • 1
    @rolling.stones and finally you asked to write code for you, and I hate that. See http://ideone.com/UfuG3U. BTW... what did you mean by _"can anyone give me a go around"_ in your post ? – P0W Oct 05 '13 at 21:15
  • Thank you soooooooo much @ POW You're a saviour !! – rolling.stones Oct 05 '13 at 21:22
0

Use the function "char* strtok(char* src, const char* delimiters)" http://en.cppreference.com/w/cpp/string/byte/strtok

char* s = "a+b-c+d";
char* p = strtok(s, "+-");  
while (p != NULL)
{
  // do something with p
  p = strtok (NULL, "+-");
}
lexasss
  • 302
  • 1
  • 2
  • 9
0

you can do this for variable delimiters as well

void main void()
{
   char stringToUpdate[100] , char delimeters[4];

/*
write code to assign strings and delimeter
*/
        replaceDelimeters(stringToUpdate, delimeters, ' ');
}   

void replaceDelimeters(char* myString, char* delimeters, char repChar)
{   
for (int i = 0; delimeters[i] != '\0'; i++)
    {
        for(int j=0; stringtoUpdate[j] != '\0'; j++)
        {
           if(stringtoUpdate[j] == delimeters[i])
           {
                stringtoUpdate[j] = repChar;
           }
        }
    }
}
Tauseef
  • 2,035
  • 18
  • 17