Parsing a string

◀ Random Number Generator▶ Conversion Between char* and string
Amazon This function has been covered in-depth by Chapter 12.8, but in case you miss it, let me introduce to you this useful function again. If you have information stored in one single string, separated by a delimiter, you can write a function to parse the string and retrieve relevant data. For example, you can have the following string representing a person’s bank account information, with # being the delimiter:
“0000#7/29/1971#CD#chris@yahoo.com#Amr#99999.99#”
The first substring is the person’s id; the second one is the person’s birthday; the third one is the person’s account type; the fourth one is the person’s email address; the fifth one is the person’s login password; the sixth one is the person’s current balance.


I want to write a function that takes as arguments a string, like the one in the above example, and an index (starting at 1, not 0), specifying which substring to return. The delimiter the function uses is #. The function returns a string which is the substring specified by the index. Now you can start writing this function on your own as an exercise. Here is my version:
#include<iostream>
using namespace std;
#include<string>  /* or <string.h> */

string parse(string s, int i) {
string t=""; int counter=0; bool start=false; for(int j=0;j<s.length();j++) { if(s[j]=='#') counter++; if(!start&&counter==i-1) start=true; if(counter==i) break; if(start&&s[j]!='#') t+=s[j]; } return t; }
However, if you know C++ string class very well, you probably know you can take advantage of some of the functions it provides such as find(). Here is another version of the function that utilizes C++ string functions:
#include<iostream>
using namespace std; #include<string> /* or <string.h> */ string parse(string s, int i) { if(i<1) return ""; int d, second, first, pos; pos=first=0; for(d=0;d<i-1;d++) { first=s.find('#',pos); if(first==string::npos) return ""; pos=first+1; } second=s.find('#',pos); if(first==0) first=-1; return s.substr(first+1,second-first-1); }
◀ Random Number Generator▶ Conversion Between char* and string

fShare
Questions? Let me know!