题解 | #冰冰的电子邮箱#

冰冰的正多边形

https://ac.nowcoder.com/acm/contest/93218/A

C语言实现,失败了很多次,忽略了字符串长度的限制,以下是题解,可能比较冗余

#include <string.h>
int EmailCheck(char address[])
{
    // 判断字符串首尾是否是'.'或者'-'
    if (address[0] == '.' || address[strlen(address) - 1] == '.' || address[strlen(address) - 1] == '-')
    {
        return 0;
    }
    // 声明一个local的字符数组记录@前面的字符串
    char local[1000];
    // 声明一个domain的字符数组记录@后面的字符串
    char domain[1000];
    // 声明一个flag记录@的个数
    int flag = 0;
    int i = 0;
    // 记录local数组的字符个数
    int local_sum = 0;
    // 记录domain数组的字符个数
    int domain_sum = 0;
    // 
    while (address[i] != '\0')
    {
        if (address[i] == '@') // 判断字符是否等于@
        {
            flag++; // 如果等于flag++
        }

        if (flag == 0) // 判断是否遇到@ 如果没遇到就把@前面的字符添加到local数组
        {
            local[i] = address[i];
            local_sum++; // local数组个数++
        }
        else if (flag == 1) // 如果遇到了@ 就把@后面的字符添加到domain数组
        {
            domain[i - local_sum] = address[i + 1];
            domain_sum++; // domain数组个数++
        }
        else // 如果遇到多个@,输入不合法,直接结束判断返回0
        {
            return 0;
        }
        
        i++; // 
    }
    
    // 判断local数组的末尾是否为'.', domain数组的第一个是否为'.'或者'-'
    if (local[local_sum - 1] == '.' || domain[0] == '.' || domain[0] == '-')
    {
        return 0; 
    }
    
    // 判断local数组是否为空,domain数组除去'\0'之后是否为空,local数组个数是否超过64,domain数组个数是否超过255
    if (local_sum == 0 || domain_sum - 1 == 0 || local_sum > 64 || domain_sum - 1  > 255)
    {
        return 0;
    }
    
    // 判断local数组里面字符的范围或者合法性
    for (int i = 0; i < local_sum; i++)
    {
        if (
            !((local[i] >= '0' && local[i] <= '9')
            || (local[i] >= 'a' && local[i] <= 'z')
            || (local[i] >= 'A' && local[i] <= 'Z')
            || local[i] == '.')
            )
        {
            return 0;
        }
    }
    
    // 判断domain数组里面字符的范围或者合法性
    for (int i = 0; i < domain_sum - 1; i++)
    {
        if (
            !((domain[i] >= '0' && domain[i] <= '9')
            || (domain[i] >= 'a' && domain[i] <= 'z')
            || (domain[i] >= 'A' && domain[i] <= 'Z')
            || domain[i] == '.' || domain[i] == '-')
            )
        {
            return 0;
        }

    }

    // 表示通过检测
    return 1;
}

int main()
{
    int num = 0;
    scanf("%d", &num);
    for (int i = 0; i < num; i++)
    {
        char address[2000];
        scanf("%s", address);
        if (EmailCheck(address))
        {
            printf("Yes\n");
            continue;
        }
        printf("No\n");
    }
    return 0;
}
全部评论

相关推荐

爱看电影的杨桃allin春招:我感觉你在炫耀
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务