判断字符串是否为IP地址

bool IsIPAddress(const char *str)
{
	if(str==NULL || *str=='\0' || *str=='.') //这个地方就不解释了
		return false;
	int len=strlen(str);
	int i=0,j=0;        //i用来控制循环,j用来指示数组arr[]
	int arr[4];         //arr[4]用来保存ip四个字段的值,如"192.234.156.1",arr[0]保存192,arr[1]保存234....
	memset(arr,0,sizeof(int)*4);   //数组初始化
	for (;i<len;i++)
	{
		if (str[i]>='0' && str[i]<='9')  //如果当前字符是数字
		{
			arr[j]=arr[j]*10+str[i]-'0';  //用arr[j]保存当前字段的数值
			
		}
		else if (str[i]=='.')            //如果当前字符是'.'
		{	
			if (str[i+1]=='\0' || str[i+1]=='.')//如果下一个字符为结尾符或出现连续两个'.'
			{
				return false;
			}
			j++;    //进入下一个字段
			if(j>3)  //如果字段数大于4个,说明肯定不是ip地址;注arr[0]-arr[3],所以是j>3,不是j>4
				return false;
			//arr[j]=0;【此处已更正,这两行话可忽视】//【注意!】这个地方没弄懂!我上面明明已经用memset把数组arr[]都初始化为0 了,
                           //但是,如果没有这句话,那么程序运行出现错误结果
		}
		else    //出现数字和'.'之外的任何其他字符,表明非ip地址
			return false;
	}
	
	if (j==3 && arr[0]<=255 && arr[1]<=255 && arr[2]<=255 && arr[3]<=255)
	{  //如果是IP地址,那么肯定有四个字段,即j==3
		return true;
	}
	else
		return false;
}


void main()
{
	char *str="255.234.234.0";
	if(IsIPAddress(str))
		cout<<"Is IP address!"<<endl;
	else
		cout<<"NOT IP address!"<<endl;
}

 

注:1、测试用例我没有附上,大家如果有兴趣可以自己测试一下,我测了好多都没问题

        2、程序中【注意!!】的地方,我上面明明已经用memset把数组arr[]都初始化为0了,但是,如果没有这句话,那么程序运行出现错误结果,还请大家帮忙分析一下

        3、对于注2中的问题已经找到问题所在,memset()使用错误,应该是memset(arr,0,sizeof(int)*4);程序中已经更正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值