CodeForces 21A 题解

题解笔记

CF21A Jabber ID(ID.cpp)

时间限制 \(0.5s\) | 内存限制 \(256M\)

题目描述:

一个地址由 <username>@<hostname>/<resource> 组成,其中/<resource>可以被省略。

<username>字段允许大写、小写字母,数字、下划线,其长度应在1到16。

<hostname>字段允许用.来分隔。每一段的要求同字段,分隔出的每一部分长度在1到16,<hostname字段的总长度在1到32。

<resource>字段要求同<username>字段。 给出一个地址,询问是否合法。

输入格式:

仅有一行,包含一个字符串,表示一个地址(保证所有字符的 ASCII 值在 \(33\)\(127\) 间),地址总长度不超过 \(100\) 字符。

输出格式:

一行,如果合法输出 YES,否则输出 NO

输入输出样例:

样例1输入 样例1输出 样例2输入 样例2输出
mike@codeforces.com YES john.smith@codeforces.ru/contest.icpc/12 NO

解题思路:

一道中等码量的模拟题,直接将字符串划分成三种区域,然后对于每种区域再按照题目条件判断即可。

参考代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
char str[1000];
char s[100][100];

int main()
{
    scanf("%s",str);
    int len = strlen(str);
    bool f1 = 0;
    bool f2 = 1;
    int k = 0, i;
    for( i=0; i<len; i++ )
    {
        if(str[i] == '@')
        {
            f1 = 1;
            break;
        }
        else
        {
            if(!((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z') ||(str[i]>='0'&&str[i]<='9')|| str[i] == '_'))
            {
                f2 = 0;
                break;
            }
            else k++;
            if(k > 16)
            {
                f2 = 0;
                break;
            }
        }
    }
    if(f1 == 0 || f2 == 0 || k < 1)
    {
        printf("NO\n");
        return 0;
    }
    k = 0;
    int k2 = 0;
    for( i=i+1; i<len; i++ )
    {
        if(str[i] == '/') break;
        else if(str[i] == '.')
        {
            if(k2 == 0)
            {
                f2 = 0;
                break;
            }
            k2 = 0;
            continue;
        }
        else
        {
            if(!((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')||(str[i]>='0'&&str[i]<='9') || str[i] == '_'))
            {
                f2 = 0;
                break;
            }
            else k++, k2++;
            if(k2 > 16 || k > 32)
            {
                f2 = 0;
                break;
            }
        }
    }
    if(f2 == 0 || k2 == 0 || k == 0)
    {
        printf("NO\n");
        return 0;
    }
    if(i == len)
    {
        printf("YES\n");
        return 0;
    }
    k = 0;
    for( i=i+1; i<len; i++ )
    {
        if(str[i] == '/')
        {
            if(k == 0)
            {
                f2 = 0;
                break;
            }
            k = 0;
            continue;
        }
        else
        {
            if(!((str[i] >= 'A' && str[i] <= 'Z') || (str[i] >= 'a' && str[i] <= 'z')||(str[i]>='0'&&str[i]<='9') || str[i] == '_'))
            {
                f2 = 0;
                break;
            }
            else k++;
            if(k > 16)
            {
                f2 = 0;
                break;
            }
        }
    }
    if(!f2 || !k) printf("NO\n");
    else printf("YES\n");
    return 0;
}


posted @ 2021-11-12 22:19  yhang323  阅读(97)  评论(0编辑  收藏  举报