您的位置:首页 > 其它

判断IP是否正确

2018-01-08 09:59 155 查看
#include<iostream>
#include<string>
using namespace std;
bool judge(string a) //判断函数
{
int n=a.size(),count=0,b[3]={0},j=0;
for(int i=0;i<n;i++) //有非法字符
if(!((a[i]>='0'&&a[i]<='9')||a[i]=='.'))
return false;
for(int i=0;i<n;i++)
if(a[i]=='.')
count++;
if(count!=3)
return false; //'.'的个数必需为3
if(n>15)
return false; //字符最长为15
for(int i=0;i<n;i++)
{
if(a[i]=='.') //'.'只能是夹在数字中间
{
if(i==0) //在开头要排除
return false;
if(i==n-1) //在结尾要排除
return false;
if(a[i-1]=='.'||a[i+1]=='.') //有相连的要排除,把后面的那个给掉了,结果导致出错
return false;
}
}
for(int i=0;i<n;i++)
{
if(a[i]!='.')
b[j]=b[j]*10+a[i]-'0'; //上面情况都无法排除后,将字符转化为数字
else
j++;
}
for(int i=0;i<4;i++) //若数字超过255,则要排除
if(b[i]>255)
return false;
return true;
}

int main()
{
string a;
cin>>a;
if(judge(a))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return 0;
}

【问题描述】

      在网络课程上,我学到了很多有关IP的知识。IP全称叫网际协议,有时我们又用IP来指代我们的IP网络地址,现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如192.168.100.16,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32位数字)。

     但是粗心的我,常常将IP地址写错,现在需要你用程序来判断。

【输入形式】

       每个case一行,不超过100个字符。

【输出形式】

       对于每个case,判断输入的IP是否正确,如果正确输出YES,否则NO。

【样例输入】
192.168.100.16


【样例输出】
YES
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: