描述
现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
现在需要你用程序来判断IP是否合法。
注意本题有多组样例输入。
输入描述:
输入一个ip地址,保证是xx.xx.xx.xx的形式(xx为整数)
输出描述:
返回判断的结果YES or NO
示例1
输入:
10.138.15.1
255.0.0.255
255.255.255.1000
复制
输出:
YES
YES
NO
#include <stdio.h>
#if 0
#define dbg printf
#else
#define dbg
#endif
int main(void)
{
char a[64] = {0};
int b[32] = {0};
int c[4] = {0};
int i, j;
int cnt;
int flag;
j = 0;
while(scanf("%s", a) != EOF)
{
flag = 0;
cnt = 0;
for(i=0; i<strlen(a); i++)
{
if(a[i] == '.')
{
cnt++;
}
}
if(cnt != 3)
{
b[j++] = 1;
continue;
}
for(i=0; a[i]!='.'; i++)
{
c[0] = c[0]*10;
c[0] = c[0]+a[i]-'0';
}
for(++i; a[i]!='.'; i++)
{
c[1] = c[1]*10;
c[1] = c[1]+a[i]-'0';
}
for(++i; a[i]!='.'; i++)
{
c[2] = c[2]*10;
c[2] = c[2]+a[i]-'0';
}
for(++i; a[i]!=0; i++)
{
c[3] = c[3]*10;
c[3] = c[3]+a[i]-'0';
}
for(i=0; i<4; i++)
{
dbg("(%d):c[%d]=%d\n", __LINE__, i, c[i]);
}
for(i=0; i<4; i++)
{
if(c[i]<0 || c[i]>255)
{
flag = 1;
break;
}
}
if(flag == 1)
{
b[j++] = 1;
}
else
{
b[j++] = 0;
}
memset(c, 0, sizeof(c));
memset(a, 0, sizeof(a));
}
for(i=0; i<j; i++)
{
if(b[i] == 1)
{
printf("NO\n");
}
else
{
printf("YES\n");
}
}
return 0;
}