互联网上的每个接口必须有一个唯一的Internet地址,称为IP地址。IP地址长32bit。这些32位的地址通常写成四个十进制的数,其中每个数对应一个字节。这种表示方法也称“点分十进制”。
五类IP不同的网络地址格式为如下图:(从上至下依次为A类、B类、C类、D类、E类)
各类IP地址的范围:
类型 | 范围 |
A B C D E | 0.0.0.0到127.255.255.255 128.0.0.0到191.255.255.255 192.0.0.0到223.255.255.255 224.0.0.0到239.255.255.255 240.0.0.0到247.255.255.255 |
代码:
#include<iostream>
#include<string>
using namespace std;
bool IsLegal_Ip(const string ipaddr)
{
int len=ipaddr.length();//计算字符串的长度
int stage=0;//该IP地址共有几部分
int stage_value=0;//每个部分的值
int is_stage=0;//判断当前部分是否有值
if(isalpha(ipaddr[0]))//===》if(ipaddr[i]>='a'&&ipaddr[i]<='z'&&ipaddr[i]>='A'&&ipaddr[i]<='Z')
return false;
for(int i=0;i<len;++i)
{
if(isdigit(ipaddr[i]))//==》if(ipaddr[i]>='0' && ipaddr[i]<='9')
{
stage_value=stage_value*10+(ipaddr[i]-'0');
++is_stage;
}
else if(ipaddr[i]=='.')
{
if(stage_value<=255 && is_stage>0)
++stage;
else
return false;
//进行下一轮判断,重新置为0
is_stage=0;
stage_value=0;
}
else//判断有负数的情况
return false;
}
//判断第四部分是否满足IP地址的要求
if(stage_value<=255 && is_stage>0)
++stage;
if(stage==4)
return true;
else
return false;
}
int main()
{
if(IsLegal_Ip("192.168.1.120"))//true
cout<<"true"<<endl;
else
cout<<"false"<<endl;
if(IsLegal_Ip("0.0.0.0"))//true
cout<<"true"<<endl;
else
cout<<"false"<<endl;
if(IsLegal_Ip("acd"))//false
cout<<"true"<<endl;
else
cout<<"false"<<endl;
if(IsLegal_Ip("362.21.0.0"))//false
cout<<"true"<<endl;
else
cout<<"false"<<endl;
if(IsLegal_Ip("125.6"))//false
cout<<"true"<<endl;
else
cout<<"false"<<endl;
if(IsLegal_Ip("-1.1.1.1"))//false
cout<<"true"<<endl;
else
cout<<"false"<<endl;
return 0;
}