判断一个字符串是否为合法ip地址(ipv4)

1.判断字符串是否形如“192.168.1.1”

2.字符串两端含有空格视为合法ip,形如“    192.168.1.1    ”

3.字符串中间含有空格视为非法ip,形如“192.168. 1.2”

4.字符串0开头视为不合法ip,形如192.168.01.1

5.字符串0.0.0.0视为合法ip

奋斗

BOOL  isIPAddressValid(const char *psAddress)
{  
	bool bDegital;
	int len = 0;
	int index = 0; 
	int nDots = 0;  
	int i, j;
	char *pIPbuf;
	const char *pTemp = psAddress;  
	while(*pTemp != '\0') {  
		if( *pTemp == '.') {
			if(*(pTemp+1) == '.') {
				return FALSE;
			}
			nDots++;  
		}
		pTemp++;  
	} 
	if( nDots != 3 ) {
		return FALSE;  
	}
	pTemp = psAddress;  
	len = strlen(psAddress);
	pIPbuf  =  new char[len+1];
	for(i=0; i<4; ++i) {  
		index = 0;
		ZeroMemory(pIPbuf, len+1);
		while(*pTemp != '\0') {  
            if(*pTemp == '.') {
				break;  
			}
            pIPbuf[index]  =  *pTemp;  
            pTemp++;  
            index++;  
		}   
		if(index == 0 || atoi(pIPbuf) < 0 || atoi(pIPbuf) > 255) {
			delete pIPbuf;
			return FALSE;
		}
		bDegital = false;
		for(j=0; j<index; j++) {
			if(!((pIPbuf[j] >= '0')&&(pIPbuf[j] <= '9'))) {
				if(pIPbuf[j] == ' ') {
					if(i == 0 && bDegital) {
						delete pIPbuf;
						return FALSE;
					} else if(i == 3) {
						if((j+1) < index) {
							if((pIPbuf[j+1] >= '0')&&(pIPbuf[j+1] <= '9')) {
								delete pIPbuf;
								return FALSE;
							}
						}
					} else {						
						delete pIPbuf;
						return FALSE;
					}
				} else {
					delete pIPbuf;
					return FALSE;
				} 
			} else {
				bDegital = true;
				if(index > 1 && pIPbuf[0] == '0') {
					delete pIPbuf;
					return FALSE;
				}
			}
		}
		if(*pTemp !='\0') {
			pTemp++;  
		}
	}   
	delete pIPbuf;
	printf("valid ip!\n");
	return TRUE;  
}  





  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巨石阵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值