Re: find function of String
 
* coolchap, on 20.10.2010 17:56:
Thank you for all your responses. I guess I am not very clear in my
question. Actually it is nothing complicated. All text except [ or ]
needs to be extracted. there is no complex stuff of subsets etc...
In that case, how about
<code>
#include <algorithm>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
void analyze( string s )
{
     replace( s.begin(), s.end(), '[', ' ' );
     replace( s.begin(), s.end(), ']', ' ' );
     istringstream   stream( s );
     string          id, numSpec;
     while( stream >> id >> numSpec )
     {
         cout << id << ' ' << numSpec << endl;
     }
}
int main()
{
     analyze( "[SBD 65 [INI 25 [PUP 0 ][RPN 25 ]][ANA 1 ][BUIPNR0 ][BUIPAX 1 ]" );
}
</code>
?
Anywayz I found a simple way using boost::regex to match only the
characters followed by numbers
   Some people, when confronted with a problem, think ?I know, I'll use regular
   expressions.?   Now they have two problems.
   - Jamie Zawinski
int main(int argc, char* argv[])
{
    try
    {
        cout<<  "[START REGEXP CHECKING]"<<  endl;
        // String to be validated
        string myString = "[SBD 65 [INI 25 [PUP 0 ][RPN 25 ]][ANA 1 ][BUIPNR
0 ][BUIPAX 1 ]";
        // Regular Expression to be used.
        string myRegexp = "[a-zA-Z]+\\s\\d+";
        boost::regex aMyRegExp(myRegexp);
        // Needed to extract some part from myString, considering the sub-
expressions grouped by "()"
        boost::cmatch matches;
        cout<<  endl<<  "String: "<<  myString;
        cout<<  endl<<  "Regular Expression: "<<  myRegexp<<  endl;
        // Checking if myString matches the Regular Expression.
        // Use boost::regex_match(myString.c_str(), aMyRegExp) if the
extraction is not needed
        std::string::const_iterator start, end;
        start = myString.begin();
        end = myString.end();
        boost::match_results<std::string::const_iterator>  what;
        boost::match_flag_type flags = boost::match_default;
        while (regex_search(start, end, what, aMyRegExp, flags)){
            cout<<  "Size: "<<  what.size()<<  endl;
            cout<<  "Result: "<<  what<<  endl;
            // update start position
            start = what[0].second;
        }
        cout<<  endl<<  endl<<  "[END REGEXP CHECKING]"<<  endl;
        return 0;
    }
    catch (...)
    {
        cout<<  "EXCEPTION!!!!"<<  endl;
        return 1;
    }
}
This prints out only text in the format of XYZ 34 etc
He he... :-)
Cheers & hth.,
- Alf
-- 
blog at <url: http://alfps.wordpress.com>