您的位置:首页 > 其它

正式赛-ZZULIOJ-1874-蛤玮学计网

2016-04-20 17:14 393 查看
Contest - “玲珑杯”郑州轻工业学院第八届ACM程序设计大赛暨河南高校邀请赛-正式赛

Problem A: 蛤玮学计网

Time Limit: 1 Sec Memory Limit: 128 MB

Submit: 906 Solved: 138

SubmitStatusWeb 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

2

10.105.240.51

f.a.t.e

Sample Output

Yes

No

HINT

我们认为010.105.240.051是合法的。

错了五次,坑点比较多。

一:显而易见,只能由四个数字和三个’.’组成

二:首位和末位不能是’.’

三:每个数字取值在0到255之间

四:数字可以有前导零,只要位数小于等于3即可

代码

#include<stdio.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
char str[55];
scanf("%s",str);
int len=strlen(str);
bool flag=0;//不合法就标记为1
int point_num=0;//点的数量
int num_num=0;//数的数量
int num=0;//数的数值
if(str[0]=='.'||str[len-1]=='.')
flag=1;
for(int i=0; i<len;i++)
{
if(str[i]>='0'&&str[i]<='9')
{
num=0;
num_num++;//数的数量为4
int num_num_num=0;//数的位数
while(str[i]>='0'&&str[i]<='9'&&i<len)
{
num=num*10+str[i]-'0';
i++;
num_num_num++;
}
i--;
if(num<0||num>255||num_num_num>3)
{
flag=1;
break;
}
}
else if(str[i]=='.')
{
num=0;
point_num++;
}
else
{
flag=1;
break;
}
}
if(num_num!=4||point_num!=3)
flag=1;
if(flag==1)
printf("No\n");
else
printf("Yes\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: