判断字符串是否为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);程序中已经更正
相关文章推荐
- 判断输入的字符串是否为合法IP地址的程序
- 如何判断用户输入的字符串是否是IP地址
- 判断一个字符串是否是合法IP地址
- 判断字符串是否为标准IP地址
- 判断输入的字符串是否为ip地址
- 判断一个字符串是否是ip地址的实现方法
- 判断一个字符串是否为有效ip地址
- 判断一个字符串是否是IP地址
- C判断一字符串是否是合法的IP地址
- 判断字符串是否为IP地址。
- 判断字符串是否为IP地址
- 判断一个字符串的ip是否是IP合法的ip地址
- 判断一个字符串是否为合法ip地址(ipv4)
- 【Python】判断一个字符串是否是合法IP地址
- 判断一个字符串的ip是否是IP合法的ip地址
- iOS - 判断一个字符串是否是ip地址
- C#下判断一个字符串是否是ip地址的函数
- C语言判断给定的字符串是否为合法的ip地址
- 在shell中如何判断字符串是否为有效的IP地址【转】
- 判断字符串是否为合格的IP地址