IP地址是一个32位的二进制数,通常被分割为4个8位二进制数。
IP地址通表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。
例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
#include<stdio.h>
#include<string.h>int main()
{
int pd(char s[]);
char a[100];
int x[100];
int h,len;
while(scanf("%s",a)!=EOF)
{
int i,k;
len=strlen(a);
k=0;
for(i=0;i<len;i=i+1)
{
if(a[i]=='.')
{
k++;
x[k]=i;
}
}
if(k==3)//把每一部分存放到一个一位数组中
{
char b[4][10]={0};
for(i=0;i<x[1];i++)
{
b[0][i]=a[i];
}
for(i=x[1]+1;i<x[2];i++)
{
b[1][i-x[1]-1]=a[i];
}
for(i=x[2]+1;i<x[3];i++)
{
b[2][i-x[2]-1]=a[i];
}
for(i=x[3]+1;i<len;i++)
{
b[3][i-x[3]-1]=a[i];
}
if(pd(b[0])==1&&pd(b[1])==1&&pd(b[2])==1&&pd(b[3])==1)
{
printf("YES\n");
}
else printf("NO\n");
}
else{
printf("NO\n");
}
}
system("pause");
return 0;
}
int pd(char s[])
{
int j,m=0;
int lenth=strlen(s);
for(j=0;j<lenth;j++)
{
if(s[j]<'0'||s[j]>'9') return 0;
}
if(s[0]=='0'&&lenth==1) return 1;
else if(s[0]=='0'&&lenth>1)return 0;
if(lenth>3||lenth==0) return 0;
for(j=0;j<lenth;j++)
{
m=m*10;
m=m+s[j]-'0';
}
if(m>255) return 0;
else return 1;
}