您的位置:首页 > 其它

判断字符串是否为IP地址

2013-09-10 17:17 141 查看
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);程序中已经更正
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: