问一个关于字符串操作的有关问题

问一个关于字符串操作的问题,
我要读一个文本文件,格式是:
main:
//=========================================================================
//文档说明:
//备案信息
A0A4   0000   02   3F00   //;   SW=9FXX
A0A4   0000   02   0000   //;9FXX
A020   0007   08   41444D   3434343434             ;   SW=9000                           //校验ADM4  

A0D6   0015   0C   0B000133   31323334FFFFFFFF   ;   SW=9000         //更新PIN1
A0D6   0021   0C   0B000233   31323334FFFFFFFF   ;   SW=9000         //更新PIN2
A0D6   002D   0C   0B0011AA   3132333435363738   ;   SW=9000         //更新PUK1

END


要求是读文本文本,当读到“main:”时开始,读到 "end "时结束
中间用//”“;”后的都不要,只要把前面的命令保存起来。并且把空格全部去掉。
上面这个例子处理后的结果要为:
A0A40000023F00
A0A40000020000
A02000070841444D3434343434
A0D600150C0B00013331323334FFFFFFFF
A0D600210C0B00023331323334FFFFFFFF
A0D6002D0C0B0011AA3132333435363738

不知道有没有高手赐教??

------解决方案--------------------
不用正则,你的代码恐怕更复杂。
掌握正则需要一个时间而已,这个正好是非常好的练手机会。
------解决方案--------------------
#include <sstream>
#include <string>
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;

const char *buf =
"main:\n\
//========================================================================\n\
//文档说明:\n\
//备案信息\n\
A0A4 0000 02 3F00 //; SW=9FXX\n\
A0A4 0000 02 0000 //;9FXX\n\
A020 0007 08 41444D 3434343434 ; SW=9000 //校验ADM4 \n\
\n\
A0D6 0015 0C 0B000133 31323334FFFFFFFF ; SW=9000 //更新PIN1\n\
A0D6 0021 0C 0B000233 31323334FFFFFFFF ; SW=9000 //更新PIN2\n\
A0D6 002D 0C 0B0011AA 3132333435363738 ; SW=9000 //更新PUK1\n\
END ";

class Pred:public unary_function <bool,char>
{
public:
bool operator()(const char &c) const
{
if( c == '/ '&& *(&c+1)== '/ ' || c== '; ' )
{
return true;
}
return false;
}
};


int main()
{
stringstream ss;
ss.str( buf );

string line;
while( getline(ss,line) )
{
if( line != "main: " && line!= "END " && !line.empty() )
{
line.erase( remove(line.begin(), find_if(line.begin(),line.end(),Pred()), ' '), line.end() );
if( !line.empty())
{
cout < <line < <endl;
}
}
}
return 0;
}