1874: 蛤玮学计网
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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;
}