? 給出類(lèi)似以下的字符串: ?
?
!@$%^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()&*........ ?
? ?
? ? 要求編寫(xiě)一個(gè)函數(shù),入口參數(shù)是指向該字符串首地址的指針,該函數(shù)無(wú)返回值,函數(shù)的功能是從上面的亂碼字符串中把所有符合標(biāo)準(zhǔn)的EMAIL地址
分析出來(lái),寫(xiě)入一個(gè)文件(比如mail.dat),寫(xiě)入文件中的EMAIL地址的格式應(yīng)該是: ?
? ?
? oldman@163.com ?
? rose@263.net ?
? hawk@hotmail.com
兩個(gè)處理函數(shù),一個(gè)處理得到@之前,一個(gè)之后
之前---如果遇到非法的字符就停止分析,比如#
之后---如果遇到非法的字符就停止分析,比如#
我覺(jué)得應(yīng)該不會(huì)很難吧。從首字符開(kāi)始逐個(gè)查找若滿足是字母或數(shù)字或下華線(是這個(gè)規(guī)則吧,不是再添),當(dāng)然首字符必須是字母,即加個(gè)IF判斷。然后移動(dòng)指針, ?
? 1。若其中發(fā)現(xiàn)有非法字符就停止該次查找,從下個(gè)字符開(kāi)始重新遍歷。 ?
? 2。若未發(fā)現(xiàn)非法字符且當(dāng)前判斷字符為@,則再檢測(cè)@后的字符直到空格為止, ? ?
? ? ? ? 若無(wú)非法字符,則該字符竄為合法EMAIL地址,寫(xiě)入文件。 ?
? 3。重復(fù)1和2,直到結(jié)素'\0'; ? ? ?
? ?
? 我想基本思路應(yīng)該是這樣,主要問(wèn)題是搞清楚什么字符是合法的這個(gè)條件!
這種語(yǔ)法分析當(dāng)然用狀態(tài)變遷圖,根據(jù)規(guī)則畫(huà)出狀態(tài)變遷圖,程序就很容易編的啦.一趟掃描就可以,用不著逆序.沒(méi)法畫(huà)圖,我用文字描述一下. ?
? 1、初始狀態(tài)S0,遇到首字符C1進(jìn)入名字狀態(tài)S1,C1={字母}; ?
? 2、名字狀態(tài)S1,遇到名字字符C2仍為名字狀態(tài),遇到字符C3進(jìn)入域名狀態(tài)S2;其它字符則返回初始狀態(tài)。C2={字母、數(shù)字、下劃線};C3={"@"}。 ?
? 3、域名狀態(tài)S2,......(自己寫(xiě)) ?
? ?
? 用一個(gè)隊(duì)列保存當(dāng)前掃描到的合法字符序列,就不必遇到“◎”逆序。