超越时空网上书城网站策划书,免费信息发布平台网站,重庆网站优化排名推广,昌平网站建设提示#xff1a;文章 文章目录
前言一、背景二、 2.1 2.2 总结
前言
接上文HJ39判断两个IP是否属于同一子网 查了下#xff0c;atoi可以转换负数。
修改成下面的代码
#include stdio.h
#include stdlib.h
#include stdbool.hbool isTargetSonN… 提示文章 文章目录
前言一、背景二、 2.1 2.2 总结
前言
接上文HJ39判断两个IP是否属于同一子网 查了下atoi可以转换负数。
修改成下面的代码
#include stdio.h
#include stdlib.h
#include stdbool.hbool isTargetSonNet(int array[], int len)
{int tempArray[32] {0};int tempArrayIndex 0;for(int i 0; i len; i){int data array[i];if(data 255 || data 0){return false;}int index ((tempArrayIndex 1) * 8);while(data){int dat data % 2;tempArray[--index] dat;data / 2;}tempArrayIndex;}int count 0;for(int i 0; i 1 32; i){int temp tempArray[i] - tempArray[i 1];if(temp ! 0 temp ! 1){return false;}if(temp 1){count;}}if(count ! 1){return false;}return true;
}int main() {int a, b;char sonNet[20] {\0};char ip1[20] {\0};char ip2[20] {\0};int arraySonNet[4] {0};int arrayIp1[4] {0};int arrayIp2[4] {0};while (scanf(%s, sonNet) ! EOF) { // 注意 while 处理多个 case// 64 位输出请用 printf(%lld) to char output f;char delimiters[2] .;char* p strtok(sonNet, delimiters);int index 0;while(p ! NULL){//printf(%s\n, p);int data atoi(p);// if(data 255)// {// output 1;// break;// }// else if(data ! 255 data ! 0)// {// output 1;// break;// }arraySonNet[index] data;p strtok(NULL, delimiters);}if(!isTargetSonNet(arraySonNet, 4)){output 1;}if(output ! f){printf(%c\n, output);break;}if(scanf(%s, ip1) ! EOF){p strtok(ip1, delimiters);int index 0;while(p ! NULL){//printf(%s\n, p);int data atoi(p);if(data 255 || data 0){output 1;break;}arrayIp1[index] data;p strtok(NULL, delimiters);}}if(output ! f){printf(%c\n, output);break;}if(scanf(%s, ip2) ! EOF){p strtok(ip2, delimiters);int index 0;while(p ! NULL){//printf(%s\n, p);int data atoi(p);if(data 255 || data 0){output 1;break;}arrayIp2[index] data;p strtok(NULL, delimiters);}}if(output ! f){printf(%c\n, output);break;}int count 0;for(int i 0; i 4; i){if( (ip1[i] sonNet[i]) (ip2[i] sonNet[i]) ){count;}}if(output f){if(count 4){output 0;}else {output 2;}}printf(%c\n, output);}return 0;
}验证一下demo示例
示例有错误 255.255.255.0 192.168.224.256 192.168.10.4 255.0.0.0 193.194.202.15 232.43.7.59 255.255.255.0 192.168.0.254 192.168.0.1 输出 1 修改成下面的代码也不行
#include stdio.h
#include stdlib.h
#include stdbool.hbool isTargetSonNet(int array[], int len)
{int tempArray[32] {0};int tempArrayIndex 0;for(int i 0; i len; i){int data array[i];if(data 255 || data 0){return false;}int index ((tempArrayIndex 1) * 8);while(data){int dat data % 2;tempArray[--index] dat;data / 2;}tempArrayIndex;}int count 0;for(int i 0; i 1 32; i){int temp tempArray[i] - tempArray[i 1];if(temp ! 0 temp ! 1){return false;}if(temp 1){count;}}if(count ! 1){return false;}return true;
}int main() {int a, b;char sonNet[20] {\0};char ip1[20] {\0};char ip2[20] {\0};int arraySonNet[4] {0};int arrayIp1[4] {0};int arrayIp2[4] {0};while (scanf(%s, sonNet) ! EOF) { // 注意 while 处理多个 case// 64 位输出请用 printf(%lld) to char output f;char delimiters[2] .;char* p strtok(sonNet, delimiters);int index 0;while(p ! NULL){//printf(%s\n, p);int data atoi(p);// if(data 255)// {// output 1;// break;// }// else if(data ! 255 data ! 0)// {// output 1;// break;// }arraySonNet[index] data;p strtok(NULL, delimiters);}if(!isTargetSonNet(arraySonNet, 4)){output 1;}if(output ! f){printf(%c\n, output);break;}if(scanf(%s, ip1) ! EOF){p strtok(ip1, delimiters);int index 0;while(p ! NULL){//printf(%s\n, p);int data atoi(p);if(data 255 || data 0){output 1;break;}arrayIp1[index] data;p strtok(NULL, delimiters);}}if(output ! f){printf(%c\n, output);continue;}if(scanf(%s, ip2) ! EOF){p strtok(ip2, delimiters);int index 0;while(p ! NULL){//printf(%s\n, p);int data atoi(p);if(data 255 || data 0){output 1;break;}arrayIp2[index] data;p strtok(NULL, delimiters);}}if(output ! f){printf(%c\n, output);continue;}int count 0;for(int i 0; i 4; i){if( (ip1[i] sonNet[i]) (ip2[i] sonNet[i]) ){count;}}if(output f){if(count 4){output 0;}else {output 2;}}printf(%c\n, output);}return 0;
}示例有错误 255.255.255.0 192.168.224.256 192.168.10.4 255.0.0.0 193.194.202.15 232.43.7.59 255.255.255.0 192.168.0.254 192.168.0.1 输出 1 1 2 0 修改代码修改成goto但是还是不行会打印4个输出很奇怪我就调试。调试后我意识到goto会跳过其他scanf操作。 应该先把数据采集完在处理。 总结
接下文HJ39判断两个IP是否属于同一子网(下)