? 給出類似以下的字符串: ?
?
!@$%^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,......(自己寫) ?
? ?
? 用一個隊列保存當前掃描到的合法字符序列,就不必遇到“◎”逆序。