笔试1--判断一个IP地址是否合法

互联网上的每个接口必须有一个唯一的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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值