7-8 Email Address

7-8 Email Address (30 分)

常常需要检查一个电子邮件地址是否合法。在Internet standards RFC 5321和RFC 5322中规定了电子邮件地址的格式。一个电子邮件地址是由@分割成local-part和domain两部分的字符串,即local-part@domain。一个电子邮件地址的local-part至多64个字符,而domain至多253个字符。 local-part可以使用下面的任何ASCII字符:

  • 大小写字母(a-z, A-Z)
  • 数字(0-9)
  • 连字符(-)、下划线(_)、句点(.),但是不能出现在第一个字符,也不能出现在最后一个字符,也不能连续出现两次或两次以上。

domain可以使用下面的任何ASCII字符:

  • 大小写字母(a-z, A-Z)
  • 数字(0-9)
  • 句点(.),但是不能出现在第一个字符,也不能出现在最后一个字符,也不能连续出现两次或两次以上。

根据上面的规定,[email protected]是一个合法的邮件地址,而[email protected]和qin[cs]@gzu.edu.cn都是非法的邮件地址。

输入格式:

输入文件有多个测试数据。每个测试数据占一行,文件最后一行为over意味着输入结束。

输出格式:

对每一行的字符串,判断是否为合法的电子邮件地址,如果合法输出legal,否则输出illegal。

输入样例:

[email protected]
Abc.gzu.edu.cn
[email protected]
A@b@[email protected]
()[]\;:,<>@163.com
over

输出样例:

legal
illegal
legal
illegal
illegal

 总结:

这就是一道字符串的模拟题,用到的就是些循环判断,并没有考察什么算法,所以说我们只需要保持思路清晰,即可做出,需要注意的点是,这道题代码量较多,循环判断较为繁琐,在写之前最好能把解题思路写下来,再将思路转化为代码,我想这样会节约很多时间,这道题我用了一个小时20分钟写完的,要是在正规比赛中肯定是失败的,所以下次写字符串的题就要速战速决

以下AC代码:

#include<iostream>
#include<string>
using namespace std;
int main(){
	while(1){
		string s;
		cin>>s;
		if(s[0]=='o'&&s[1]=='v'&&s[2]=='e'&&s[3]=='r'){
			break;
		}
		int cnt1=0,cnt2=0;//cnt1用于计算第一部分长度,cnt2用于计算第二部分长度
		bool flag1=0,flag2=0;//flag1用于判断是否有@,flag2用于判断是否符合规范
		for(int i=0;i<s.size();i++){//for循环用于查找@
			if(s[i]=='@'){
				if(i>64){
					cout<<"illegal"<<endl;
					break;
				}
				else {
					flag1=1;
					break;
				}
			}
		}
		//cout<<"判断1完成"<<endl;
		if(flag1){
		//	cout<<"*******************"<<endl;
			for(int i=0;i<s.size();i++){
		//		cout<<"&&&&&&&"<<endl;
				if((s[i]>=65&&s[i]<=90)||(s[i]>=97&&s[i]<=122)
				||(s[i]>=48&&s[i]<=57)){
					cnt1++;
					continue;
				}
				else if(s[i]=='-'||s[i]=='_'||s[i]=='.'){
					if(s[i]=='-'&&s[i-1]=='-'){
						cout<<"illegal"<<endl;	
						break;			
					}
					else if(s[i]=='_'&&s[i-1]=='_'){
						cout<<"illegal"<<endl;
						break;				
					}
					else if(s[i]=='.'&&s[i-1]=='.'){
						cout<<"illegal"<<endl;
						break;				
					}else{
						cnt1++;
					}		
				}
				else if(s[i]=='@'){
					if(s[0]=='-'||s[0]=='_'||s[0]=='.'
					||s[cnt1]=='-'||s[cnt1]=='_'||s[cnt1]=='.'){
						cout<<"illegal"<<endl;
					}
					break;
				}else{
					cout<<"illegal"<<endl;
					break;
				}
			}
		//	cout<<"cnt1="<<cnt1<<endl;
			if(s[cnt1]=='@'){
		//		cout<<"@@@@@@@@@@@@@@@@"<<endl;
				for(int i=cnt1+1;i<s.size();i++){
					if(cnt2>253){
						cout<<"illegal"<<endl;
						break;
					}
					else if((s[i]>=65&&s[i]<=90)||(s[i]>=97&&s[i]<=122)
					||(s[i]>=48&&s[i]<=57)){
						cnt2++;
						continue;
					}
					else if(s[i]=='.'){
						if(s[i]=='.'&&s[i-1]=='.'){
							cout<<"illegal"<<endl;	
							break;			
						}			
					}
					else{
						cout<<"illegal"<<endl;
						break;
					}
					flag2=1;
					//cout<<"legal"<<endl;
				}	
		//		cout<<"cnt2="<<cnt2<<endl;
				if(flag2){
					cout<<"legal"<<endl;
				}
			}
		}
		else{
			cout<<"illegal"<<endl;			
		}
	}
}

猜你喜欢

转载自blog.csdn.net/Helloirbd/article/details/87889326
7-8
今日推荐