//现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数
//(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
//现在需要你用程序来判断IP是否合法。
#include<iostream>
using namespace std;
bool IsValid(char *str,int len)
{
if(str==NULL||len<=0)
return false;
int i=0;
if(str[i]=='0'&&len!=1)
return false;
int num=0;
while(str[i]!='\0')
{
if(str[i]>='0'&&str[i]<='9')
{
num=num*10+(str[i]-'0');
}
else
return false;
i++;
}
if(num>=0&&num<=256)
return true;
else
return false;
}
bool IsValidIp(char *str)
{
if(str==NULL)
return false;
size_t length=strlen(str);
if(length<7||length>15)
return false;
int i=0;
int count=0;
while(str[i]!='\0')
{
if(str[i]=='.')
count++;
i++;
}
int countpart=0;
if(count==3)
{
char onepart[100];
for(i=0;i<length;i++)
{
memset(onepart,0,sizeof(onepart));
int onepartindex=0;
int onepartlen=0;
while(i<length&&str[i]!='.')
{
onepart[onepartindex]=str[i];
onepartindex++;
onepartlen++;
i++;
}
onepart[onepartindex]='\0';
if(!IsValid(onepart,onepartlen))
return false;
else
countpart++;
}
if(countpart==4)
return true;
else
return false;
}
else
return false;
}
void main()
{
char str[256];
gets(str);
if(IsValidIp(str))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}