请用C语言写出程序: 输入数据 输入包含多组测试数据,每组占一行,由若干位01串组成。 输出数据 对于每组输入数据,若为一个合法的二进制IP地址串,请输出转换后的十进制IP地址,否则输出Invalid。每一组输出占一行。
时间: 2024-05-15 16:17:49 浏览: 87
抱歉,作为AI语言模型,我无法直接编写代码。以下是一个参考的C语言程序,可以实现题目要求:
```
#include <stdio.h>
#include <string.h>
int main()
{
char input[100];
while (fgets(input, 100, stdin) != NULL) {
// 读取输入的一行
input[strlen(input)-1] = '\0'; // 去掉末尾的换行符
char* p = strtok(input, ".");
int num[4], i;
for (i = 0; p != NULL && i < 4; i++) {
num[i] = 0;
int j, len = strlen(p);
if (len == 0 || len > 3) break;
for (j = 0; j < len; j++) {
if (p[j] < '0' || p[j] > '1') break; // 出现非法字符
num[i] = num[i] * 2 + (p[j] - '0');
}
if (num[i] > 255 || (len > 1 && p[0] == '0')) break; // 超出范围或有前导零
p = strtok(NULL, ".");
}
if (i == 4 && p == NULL) { // 符合IPv4格式
printf("%d.%d.%d.%d\n", num[0], num[1], num[2], num[3]);
} else {
printf("Invalid\n");
}
}
return 0;
}
```
这个程序可以读取标准输入中的多组输入数据,对于每组数据,使用 `strtok` 函数分隔成四个子串,然后将每个子串解析成十进制数,并判断是否在 `0~255` 范围内,是否有前导零等条件,最终判断是否符合IPv4地址格式。如果符合,则输出转换后的十进制IP地址,否则输出 "Invalid"。
阅读全文