华为面试题:识别有效的ip地址和子网掩码并分类 C语言源码

识别有效的ip地址和子网掩码并分类:
按行输入多组数据 
10.8.9.2~255.0.0.0
180.8.9.2~255.254.0.0
打印:A B C D E 错误的ip或掩码 私有ip  的个数
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define MAX_PATH 256

int maze[10][10] = {0};
int route[100][2] = {0};

int impl(char *ip,char *mask,int *privateIp)
{
	char *a = strtok(ip,".");
	char *b = strtok(NULL,".");
	char *c = strtok(NULL,".");
	char *d = strtok(NULL,".");

	if (!(a && b && c && d))
	{
		return 5;
	}
	int ai = atoi(a);
	int bi = atoi(b);
	int ci = atoi(c);
	int di = atoi(d);
// 	char *a1 = strtok(mask,".");
// 	char *b1 = strtok(NULL,".");
// 	char *c1 = strtok(NULL,".");
// 	char *d1 = strtok(NULL,".");

	if(ai>0 && ai<=126 && strcmp(mask,"255.0.0.0")==0)
	{
		if (ai==10 && bi>=0 && bi<=255)
		{
			*privateIp = 1;
		}
		return 0;
	}
	else if(ai>=128 && ai<=191 && strcmp(mask,"255.255.0.0")==0)
	{
		if (ai==172 && bi>=16 && bi<=31)
		{
			*privateIp = 1;
		}
		return 1;
	}
	else if(ai>=192 && ai<=223 && strcmp(mask,"255.255.255.0")==0)
	{
		if (ai==192 && bi==168)
		{
			*privateIp = 1;
		}
		return 2;
	}
	else if(ai>=224 && ai<=239)
	{
		return 3;
	}
	else if(ai>=240 && ai<=255)
	{
		return 4;
	}
	else
	{
		return 5;
	}
}
int main()
{

// 	char test[4][100]={"10.70.44.68~255.254.255.0",
// 		"1.0.0.1~255.0.0.0",
// 		"192.168.0.2~255.255.255.0",
// 		"19..0.~255.255.255.0"};
	
	int result[7] = {0};
	char test[100] = {0};
	while(scanf("%s",test)!=EOF)
	{
		char *ip = strtok(test,"~");
		char *mask = strtok(NULL,"~");
		int n = impl(ip,mask,&result[6]);
		result[n]++;
	}
// 	for (int i=0;i<4;i++)
// 	{
// 		char *ip = strtok(test[i],"~");
// 		char *mask = strtok(NULL,"~");
// 		int n = impl(ip,mask,&result[6]);
// 		result[n]++;
// 	}
	for (int i=0;i<7;i++)
	{
		printf("%d ",result[i]);
	}
	return 0;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值