旅途

如果想飞得高,就该把地平线忘掉

字符串分析 --继续

  给出类似以下的字符串:  
  !@$%^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,......(自己写)  
   
  用一个队列保存当前扫描到的合法字符序列,就不必遇到“◎”逆序。


posted on 2007-09-24 18:17 旅途 阅读(325) 评论(0)  编辑 收藏 引用 所属分类: C/C++


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理