192.168.100.16
YES
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
#define maxn 10000 + 6
char six[maxn];
char xp[maxn];
int liu[maxn];
int calcu(char s[])
{
int len=strlen(s);
int sum=0;
for(int i=0;i<len;i++)
{
sum=sum*10+(s[i]-'0');
}
return sum;
}
int main()
{
int i,j,k;
int t,n,m;
int a,b,c;
while(gets(six)!=NULL)
{
int len=strlen(six);
if(len<7||len>15) ///最小和最大长度
{
printf("NO\n");
continue;
}
if(six[0]=='.'||six[len-1]=='.') ///判断头尾有无dot
{
printf("NO\n");
continue;
}
int flag=1;
for(i=0;i<len;i++) ///判断有无空格
{
if(six[i]==' ')
{
flag=0;
break;
}
}
if(flag==0)
{
printf("NO\n");
continue;
}
for(i=0;i<len;i++) ///判断是否有除dot外非数字的字符
{
if((six[i]<'0'||six[i]>'9')&&six[i]!='.')
{
flag=0;
break;
}
}
if(flag==0)
{
printf("NO\n");
continue;
}
m=0;
for(i=0;i<len;i++) ///找到dot个数
{
if(six[i]=='.')
m++;
}
if(m!=3)
{
printf("NO\n");
continue;
}
m=0;
for(i=0;i<len;i++) ///找到dot位置
{
if(six[i]=='.')
liu[m++]=i;
}
/**if(liu[0]>3||len-1-liu[2]>3)
{
printf("NO\n");
continue;
}
if(liu[1]-liu[0]>4||liu[1]-liu[0]==1||liu[2]-liu[1]>4||liu[2]-liu[1]==1)
{
printf("NO\n");
continue;
}*/
char l1[6]={},l2[6]={},l3[6]={},l4[6]={};
flag=0;
for(i=0;i<liu[0];i++)
{
l1[flag++]=six[i];
}
flag=0;
for(i=liu[0]+1;i<liu[1];i++)
{
l2[flag++]=six[i];
}
flag=0;
for(i=liu[1]+1;i<liu[2];i++)
{
l3[flag++]=six[i];
}
flag=0;
for(i=liu[2]+1;i<len;i++)
{
l4[flag++]=six[i];
}
///printf("%s\n",six);
///printf("%d %d %d\n",liu[0],liu[1],liu[2]);
///printf("%s\n%s\n%s\n%s\n",l1,l2,l3,l4);
flag=0;
if(calcu(l1)>255||calcu(l2)>255||calcu(l3)>255||calcu(l4)>255)
flag=1;
if(flag)
{
printf("NO\n");
continue;
}
printf("YES\n");
}
return 0;
}
IP的计算------HDOJ杭电2206(写完脑洞大开,想象力要足够丰富)
原文地址:http://blog.csdn.net/u014231159/article/details/41653473