zzuoj1874: 蛤玮学计网

1874: 蛤玮学计网

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 1046   Solved: 164

Submit Status Web Board

Description

蛤玮最近学习了关于ip的知识,于是他迫不及待的想把新知识传授给她的妹子.蛤玮的妹子随便写下了一个字符串,蛤玮现在要告诉她这个字符串是不是一个合法的ip地址.
为简单考虑,仅考虑ipv4的情况,即合法ip为形同"a1.a2.a3.a4",且0<=ai<=255。

Input


第一行为一个整数T(1<=T<=20),代表数据组数。接下来T行每行一个字符串,其中不包含空格,Tab以及回车,长度不超过50。

Output

若合法,输出"Yes",否则输出"No"(不包含引号)。

Sample Input

210.105.240.51f.a.t.e

Sample Output

YesNo

HINT


我们认为010.105.240.051是合法的。

/*
根据题目描述,下面看一下这几组测试数据,应该都会了
0000.0.0.0
0.0000.0.0
0.0.0000.0
0.0.0.0255
0..0.0
0.0.0.0.0
a.f.s.e
这些测试数据输出都为No
加上以上这些特例,这道题就A了
*/
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>

using namespace std;

int main()
{
    int t;
    cin >> t;
    while(t --)
    {
        string s;
        cin >> s;
        int num = 0,k = 0;
        for(int i = 0; i < s.size(); i ++)
        {
            if(s[i] >= '0' && s[i] <= '9')
                num ++;
            if(s[i] == '.')
                ++ k;
        }
        bool flag = 0;
        for(int i = 0; i+1 < s.size(); i ++)
            if(s[i] == '.' && s[i + 1] == '.')
            {
                printf("No\n");
                flag = 1;
                break;
            }
        if(flag)
            continue;
        if(num == s.size() - 3 && k == 3)
        {
            int a[5] = {0},i,j = 0;
            for(i = 0; i < s.size() && '.' != s[i]; i ++)
                a[1] =  a[1] * 10 + s[i] - '0',j ++;
            if(j > 3) 
            {
                printf("No\n");
                continue;
            }
            j = 0;
            for(++ i; i < s.size() && '.' != s[i]; i ++)
                a[2] = a[2] * 10 + s[i] - '0',j ++;
            if(j > 3)
            {
                printf("No\n");
                continue;
            }
            j = 0;
            for( ++ i; i < s.size() && '.' != s[i]; i ++)
                a[3] = a[3] * 10 + s[i] - '0',j ++;
            if(j > 3)
            {
                printf("No\n");
                continue;
            }
            j = 0;
            for( ++ i; i < s.size() && '.' != s[i]; i ++)
                a[4] = a[4] * 10 + s[i] - '0',j ++;
            if(j > 3)
            {
                printf("No\n");
                continue;
            }
            j = 0;
            if(a[1] >= 0 && a[1] <= 255 && a[2] >= 0 && a[2] <= 255&&a[3] >= 0 && a[3] <= 255&&a[4] >= 0 && a[4] <= 255)
                printf("Yes\n");
            else
                printf("No\n");
        }
        else
            printf("No\n");
    }
    return 0;
}


你可能感兴趣的:(ACM)