检测一个字符串ip是否合法

int check_ip(char *ip){
	char * p=ip;
	int count=0;
	while(*p != '\0'){
		if( *p == '.') count++;
		p++;
	}
	if( count != 3 )return false;
	p=ip;
	for(int i=0;i<4;++i){
		int len=0;
		int tem=0;
		while(*p!=NULL){
			if(*p=='.')break;
			tem=tem*10+*p-'0';
			p++;
			len++;
		}
		if(len==1){
			if(tem<0||tem>9)return false;
		}else if(len==2){
			if(tem<10 ||tem>99)return false;
		}else if(len==3){
			if(tem<100||tem>255)return false;
		}else return false;
		if(*p!='\0')p++;
	}
	return true;
}

先检测是不是有三个点

然后一次检查每个部分的取值是否在合法的范围内

### 回答1: 当然,我可以为您提供一段检测IP地址是否合法的C语言代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> int is_valid_ip(char *ip) { int num, dots = 0; char *ptr; if (ip == NULL) { return 0; } ptr = strtok(ip, "."); if (ptr == NULL) { return 0; } while (ptr) { if (!isdigit(*ptr)) { return 0; } num = atoi(ptr); if (num < 0 || num > 255) { return 0; } ptr = strtok(NULL, "."); if (ptr != NULL) { dots++; } } if (dots != 3) { return 0; } return 1; } int main() { char ip[16]; printf("请输入IP地址:"); scanf("%s", ip); if (is_valid_ip(ip)) { printf("IP地址合法\n"); } else { printf("IP地址不合法\n"); } return 0; } ``` 这段代码可以检测输入的IP地址是否合法,如果合法则输出“IP地址合法”,否则输出“IP地址不合法”。 ### 回答2: 下面是一个简单的C算法,用于检测IP地址的合法性: ```c #include <stdio.h> #include <string.h> #include <stdlib.h> int validateIP(char *ip) { int num, dotCount = 0; char *token; // 检查IP中的数字和点的数量是否符合要求 for (int i = 0; i < strlen(ip); i++) { if (ip[i] == '.') { dotCount++; } else if (ip[i] < '0' || ip[i] > '9') { return 0; // 包含非数字字符,返回不合法 } } if (dotCount != 3) { return 0; // 点的数量不正确,返回不合法 } // 使用strtok函数将IP地址分割成四个部分 token = strtok(ip, "."); while (token != NULL) { num = atoi(token); // 将字符串转换为整数 if (num < 0 || num > 255) { return 0; // 数字不在有效范围内,返回不合法 } token = strtok(NULL, "."); } return 1; // IP地址合法 } int main() { char ip[20]; printf("请输入IP地址:"); scanf("%s", ip); if (validateIP(ip)) { printf("IP地址合法\n"); } else { printf("IP地址不合法\n"); } return 0; } ``` 这段代码中,`validateIP`函数用于检测IP地址的合法性。它首先检查IP地址中的数字和点的数量是否符合要求,然后使用`strtok`函数将IP地址分割成四个部分,并将每个部分转换为整数。最后,它检查每个数字是否在有效范围内(0到255之间)。如果IP地址是合法的,函数返回1;否则返回0。 在`main`函数中,用户可以输入一个IP地址,并调用`validateIP`函数进行检测。根据检测结果,程序会输出相应的提示信息。 ### 回答3: 下面是一段大致功能实现的C语言代码,可以用于检测IP地址的合法性。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> int isValidIP(char *ip) { int num, dotCount = 0; char *token; const char delimiters[] = "."; // 检查是否为空指针 if (ip == NULL) { return 0; } // 分割IP地址为四个部分 token = strtok(ip, delimiters); while (token != NULL) { num = atoi(token); // 检查每个部分是否在0-255之间 if (num < 0 || num > 255) { return 0; } dotCount++; token = strtok(NULL, delimiters); } // 检查是否有且仅有三个点分割 if (dotCount != 3) { return 0; } return 1; // IP地址合法 } int main() { char ip[16]; printf("请输入一个IP地址:"); scanf("%s", ip); if (isValidIP(ip)) { printf("输入的IP地址合法!\n"); } else { printf("输入的IP地址不合法!\n"); } return 0; } ``` 这段代码通过`isValidIP`函数检测IP地址的合法性,接受一个字符串作为参数,返回1表示合法,返回0表示不合法。在`main`函数中,通过用户输入一个IP地址,并调用`isValidIP`函数进行判断,输出相应的结果。 IP地址的合法性判断条件如下: 1. IP地址由四个部分组成,以点作为分隔符。 2. 每个部分都是一个数值,取值范围为0-255。 3. 且仅有三个点分割。 该代码只是一个简单的示例,可能还存在一些特殊情况没有处理,可以根据实际需求进行改进和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值