Solved

how can i parse part of string ? (urgent)

Posted on 2004-09-19
5
148 Views
Last Modified: 2010-04-01
Hi experts,

I have a string, like " this is a customer account, ref: abc#123456789 ".
I only need to parse partial string "ref: abc#123456789". how can i do that ?
Any function can do that ?

Thanks
0
Comment
Question by:justinY
5 Comments
 
LVL 86

Accepted Solution

by:
jkr earned 125 total points
ID: 12097318
You'd find the start of the substring by e.g. looking for 'ref:', like

char acSomeString[] = " this is a customer account, ref: abc#123456789 ";

char* pszStringToParse = strstr ( acSomeString, "ref:");

// will then be "ref: abc#123456789 "
0
 
LVL 1

Expert Comment

by:zekard
ID: 12098959
justinY,
try this:

#include <iostream>

using namespace std;

char* FindSubStr ( char *str, int size, char *query )
{
      int IndexOfSubStr = 0;

      // find occurence of substr
      for ( int i = 0; i < size; i++ )
      {
            if ( str[i] == query[0] && str[i+1] == query[1] && str[i+2] == query[2] )
            {
                  IndexOfSubStr = i;
                  break;
            }
      }

      static char substr[128];
      int substrIndex = 0;
      // copy string to substr and return it
      for ( i = IndexOfSubStr; i < size; i++ )
      {
            substr[substrIndex] = str[i];
            substrIndex++;
      }

      return substr;
}
int main ()
{
      // input string
      char str[128] = "this is a customer account, ref: abc#123456789";
      
      // substr stores the sub string if found
      char *substr;
      
      // size of input string
      int size = strlen ( str );

      // call function to find our string
      substr = FindSubStr ( str, size, "ref:" );

      cout << substr << endl;

      return 0;
}
0
 
LVL 10

Expert Comment

by:Sys_Prog
ID: 12099065
More C++ way of doing it

#include <iostream>
#include <string>

using namespace std ;
int main () {

      string s1 = "this is a customer account, ref: abc#123456789 ";

      unsigned int pos = s1.find ( "ref" ) ;
      cout << s1.substr ( pos ) ;
      system ( "PAUSE" ) ;
}
0
 

Author Comment

by:justinY
ID: 12150602
Thank you all,
Lets change my question a little bit.

string s1 = "this is a customer account,  'abc#123456789' ";
so i want to extract substring "abc#123456789" from single quotes (' ')
i like to use
s = s.substr(s.find_first_of("\'") + 1);
s = s.substr(s.find_last_of("\'") - 1);
My code is like the followings. but i have compiling errors, any experts can help ? or any function of extracting substring from single quotes (' ') i can use ?
 
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
#include <algorithm>

using namespace std;

main(int arc, char *arv[])
{
      ifstream fin("fin.txt");
      ofstream fout("fout.txt");
      char row_read[512];
      char row_elem[50][50];
      int i =0;
while( fin.getline( row_read, sizeof( row_read ) ) )
{
      //////////////////////////////////////////
      // get tokens, parse string with ","
      //////////////////////////////////////////
      char *token = strtok( row_read, ',' );
      char *subtoken(token);
      while( token != NULL )
      {
            
           subtoken = token.substr(token.find_first_of("\'") + 1);
           subtoken = token.substr( token.find_last_of("\'") - 1);
            /////////////////////////////////////////////////////////////
            //write the subtoken into row_elem[i]
            ////////////////////////////////////////////////////////////
             /* While there are tokens in "string" */
                   strcpy(row_elem[i], subtoken );
             /* Get next token: */
                   token = strtok( NULL, ',' );
                   i++;
                  
            }
            
      }

                    fout<<setw(20)<< row_elem[8]<<endl;

     i=0;
}

return 0;
}
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

In days of old, returning something by value from a function in C++ was necessarily avoided because it would, invariably, involve one or even two copies of the object being created and potentially costly calls to a copy-constructor and destructor. A…
Introduction This article is the first in a series of articles about the C/C++ Visual Studio Express debugger.  It provides a quick start guide in using the debugger. Part 2 focuses on additional topics in breakpoints.  Lastly, Part 3 focuses on th…
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now