c语言输入一串字符,判断该字符串是否为点分十进制的IP地址,若是则转换为16进制输出,否则输出“Error”
时间: 2023-05-27 21:02:54 浏览: 175
```c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX_LEN 15
int main(void) {
char str[MAX_LEN + 1];
int nums[4], i, j;
unsigned int ip;
printf("请输入IP地址:");
scanf("%s", str);
// 判断输入的字符串是否为点分十进制的IP地址
// 并将四个数存入nums数组中
char *token = strtok(str, ".");
for (i = 0; i < 4; i++) {
if (token == NULL) {
printf("Error\n");
return 0;
}
nums[i] = atoi(token);
if (nums[i] < 0 || nums[i] > 255) {
printf("Error\n");
return 0;
}
token = strtok(NULL, ".");
}
if (token != NULL) {
printf("Error\n");
return 0;
}
// 将点分十进制的IP地址转换为16进制
ip = (nums[0] << 24) | (nums[1] << 16) | (nums[2] << 8) | nums[3];
printf("IP地址对应的16进制为:0x%X\n", ip);
return 0;
}
```
说明:
本题可以分成两部分:判断输入的字符串是否为点分十进制的IP地址,以及将点分十进制的IP地址转换为16进制。
判断输入的字符串是否为点分十进制的IP地址:
1. 使用 strtok 函数按照 '.' 将字符串分割成四段,存入 nums 数组中。如果分割出的段数不为 4,或者有任意一段不是数字或不在 [0, 255] 范围内,就输出 "Error" 并结束程序。
2. 如果字符串被成功地分割成了四段,那么就可以认为它是点分十进制的IP地址。
将点分十进制的IP地址转换为16进制:
使用移位运算符 << 来将每个数字转换为对应的16进制数,然后按位或运算得到最终的IP地址。
阅读全文
相关推荐















