vector<string> SplitString (string aString,char *sep)
{
vector<string> vec;
char * cstr,*val,*p;
string str = aString;
cstr = new char [str.size()+1];
strcpy (cstr, str.c_str());
p=strtok (cstr,sep);
while(p!=NULL)
{
vec.push_back(p);
p=strtok(NULL,sep);
}delete[] cstr;return vec; }
This is my code to string split. I sent the below string to split with separator '&'
"f0=fname0&l0=lname0&f1=fname1&l1=lname1&f2=fname2&l2=lname2&f3=&l3=".
I got result in the vector as below.
f0=fname0 l0=lname0 f1=fname1 l1=lname1 f2=fname2 l2=lname2 f3= l3=
Now I again the sent the resulted strings with separator '='. Its working fine with "l2=lname2". But for "f3=" and "l3=" My separator at last position of the string. So I couldn't find the value is null or not . I want to know whether the value ( left side of '=' is name and right side one is value ) is empty or not. How can i check this.
How about boost? I think it is easiest way to split string.
Check whether the last character of the string you're tokenising is in fact the seperator itself.
Edit: Based on your comment, then before tokenising the string I would modify it using
string::find
andstring::replace
to replace occurrences of "=&" with "=hi&" and a terminating "=" with "=hi". In that way you'll avoid awkward parsing.Also, then you won't need two passes of the tokenising because the
strDelimit
parameter ofstrtok
can then be "&=" (both delimiters in one pass).