Steffan Harris
Steffan Harris

Reputation: 9336

Parsing a string by a delimeter in C++

Ok, so I need some info parsed and I would like to know what would be the best way to do it. Ok so here is the string that I need to parse. The delimeter is the "^"

John Doe^Male^20

I need to parse the string into name, gender, and age variables. What would be the best way to do it in C++? I was thinking about looping and set the condition to while(!string.empty() and then assign all characters up until the '^' to a string, and then erase what I have already assigned. Is there a better way of doing this?

Upvotes: 0

Views: 959

Answers (4)

Jonathan Wood
Jonathan Wood

Reputation: 67283

You have a number of choices but I would use strtok(), myself. It would make short work of this.

Upvotes: 0

user909058
user909058

Reputation: 188

#include <stdio.h>

#include <string.h>

int main ()

{

  char str[] = "This is a sample string";

  char * pch;

  printf ("Looking for the 's' character in \"%s\"...\n",str);

  pch=strchr(str,'s');

  while (pch!=NULL)

  {

    printf ("found at %d\n",pch-str+1);

    pch=strchr(pch+1,'s');

  }

  return 0;

}

Do something like this in an array.

Upvotes: 0

Mranz
Mranz

Reputation: 1278

You have a few options. One good option you have, if you can use boost, is the split algorithm they provide in their string library. You can check out this so question to see the boost answer in action: How to split a string in c

If you cannot use boost, you can use string::find to get the index of a character:

string str = "John Doe^Male^20";

int last = 0;
int cPos = -1;
while ((cPos = str.find('^', cPos + 1)) != string::npos)
{
   string sub = str.substr(last, cPos - last);

   // Do something with the string

   last = cPos + 1;
}

Upvotes: 1

coder4
coder4

Reputation: 319

You can use getline in C++ stream.

istream& getline(istream& is,string& str,char delimiter=’\n’)

change delimiter to '^'

Upvotes: 2

Related Questions