【PTA 7-8】Email Address

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Xylon_/article/details/87882815

                              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

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f
#define mem(a,b) memset(a,b,sizeof(a))
#define closeio std::ios::sync_with_stdio(false)

string a,s1,s2;
int n,fly;

void judge1(string s)
{
    int n=s.length();
    if(n>64||s[0]=='-'||s[0]=='_'||s[0]=='.'||s[n-1]=='-'||s[n-1]=='_'||s[n-1]=='.')
    {
        fly=1;
        return ;
    }
    for(int i=0;i<n;i++)
    {
        if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')||(s[i]>='0'&&s[i]<='9'))
            continue;
        else if(s[i]=='-'||s[i]=='_'||s[i]=='.')
        {
            if(s[i+1]==s[i])
            {
                fly=1;
                break;
            }
        }
        else
        {
            fly=1;
            break;
        }
    }
}

void judge2(string s)
{
    if(fly)
        return ;
    if(n>253||a[0]=='.'||a[n-1]=='.')
    {
        fly=1;
        return ;
    }
    for(int i=0;i<n;i++)
    {
        if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')||(s[i]>='0'&&s[i]<='9'))
            continue;
        else if(s[i]=='.')
        {
            if(s[i+1]==s[i])
            {
                fly=1;
                break;
            }
        }
        else
        {
            fly=1;
            break;
        }
    }
}

int main()
{
    int i;
    while(cin>>a)
    {
        if(a=="over")
            break;
        int flag=0,x;
        for(i=0;i<a.length();i++)
        {
            if(a[i]=='@')
            {
                flag++;
                x=i;
            }
                
        }
        if(flag!=1)
        {
            cout<<"illegal"<<endl;
            continue;
        }
        s1=a.substr(0,x-1);
        s2=a.substr(x+1,a.length()-1);
        fly=0;
        judge1(s1);
        judge2(s2);
        if(fly)
            cout<<"illegal"<<endl;
        else
            cout<<"legal"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Xylon_/article/details/87882815
7-8