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);程序中已经更正