(1)编写函数convert(), 将字符串表示的IP地址转为为32位无符号整数
(2)编写函数checkip(), 检查ip地址配置是否正确(当ip地址和子网相与(&)的结果,和网关和子网掩码相与的结果相等时,认为配置正确;否则认为不正确;
主函数调用上述函数,完成对输入ip地址/子网掩码/网关ip地址配置的检查。
输入样例1:
输入3个字符串,分别表示主机的ip地址、子网掩码和网关。
192.168.0.1
255.255.255.0
192.168.0.254
输出样例1:
若配置正确,输出YES;否则输出NO (判断规则:当ip地址和子网相与(&)的结果,和网关和子网掩码相与的结果相等时,认为配置正确)
YES
输入样例2:
10.0.10.10
255.255.0.0
10.10.1.1
输出样例2:
NO
代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef unsigned int U32;
unsigned int convert(char s[])
{
const char str[2] = ".";
char *token = strtok(s,str);
int a[4];
int i;
a[0] = atoi(token);
for(i = 1; i < 4; i++)
{
token = strtok(NULL,str);//参数为NULL的时候,该函数默认使用上一次未分割完的字符串的末位置作为起始位置
a[i] = atoi(token);
}//for
unsigned int IP = (a[0] << 24 | a[1] << 16 | a[2] << 8 | a[3]);//有 1 则 1
return IP;
}//convert
int checkip(int ip,int netmask, int gateway)
{
if((ip & netmask) == (netmask & gateway))
return 1;
else
return 0;
}//checkip
int main()
{
char sip[32] = {0};
char snt[32] = {0};
char sgt[32] = {0};
gets(sip);
gets(snt);
gets(sgt);
U32 ip = convert(sip);
U32 netmask = convert(snt);
U32 gateway = convert(sgt);
if(checkip(ip, netmask, gateway)){
printf("YES");
}
else{
printf("NO");
}
return 0;
}