给出类似以下的字符串:
!@$%^HJDK#(O$%()_R@#KL#J*^*^!&*%@&^%#*(&*^@*(&^&*(&^(!((
oldman@163.com @()*)(@&U*()(_* rose@263.net
@()&*()_*(_(&_*&^Y*(PHUIOP#&(_*)HJKO:JK Y*() Y
Y*(_ HJKP U*() HIOK {JK{ OPI U*(&BV%&T#UO
GDOUIV&*OV)#&(_* &**&*(&*((&* BN
hawk@hotmail.com ()U&*()@*()I)_N KNMU()&*........
要求编写一个函数,入口参数是指向该字符串首地址的指针,该函数无返回值,函数的功能是从上面的乱码字符串中把所有符合标准的EMAIL地址
分析出来,写入一个文件(比如mail.dat),写入文件中的EMAIL地址的格式应该是:
oldman@163.com
rose@263.net
hawk@hotmail.com
两个处理函数,一个处理得到@之前,一个之后
之前---如果遇到非法的字符就停止分析,比如#
之后---如果遇到非法的字符就停止分析,比如#
我觉得应该不会很难吧。从首字符开始逐个查找若满足是字母或数字或下华线(是这个规则吧,不是再添),当然首字符必须是字母,即加个IF判断。然后移动指针,
1。若其中发现有非法字符就停止该次查找,从下个字符开始重新遍历。
2。若未发现非法字符且当前判断字符为@,则再检测@后的字符直到空格为止,
若无非法字符,则该字符窜为合法EMAIL地址,写入文件。
3。重复1和2,直到结素'\0';
我想基本思路应该是这样,主要问题是搞清楚什么字符是合法的这个条件!
这种语法分析当然用状态变迁图,根据规则画出状态变迁图,程序就很容易编的啦.一趟扫描就可以,用不着逆序.没法画图,我用文字描述一下.
1、初始状态S0,遇到首字符C1进入名字状态S1,C1={字母};
2、名字状态S1,遇到名字字符C2仍为名字状态,遇到字符C3进入域名状态S2;其它字符则返回初始状态。C2={字母、数字、下划线};C3={"@"}。
3、域名状态S2,......(自己写)
用一个队列保存当前扫描到的合法字符序列,就不必遇到“◎”逆序。