您的位置:首页 > 其它

判断输入的字符串是否为合法IP地址的程序

2015-08-27 11:38 716 查看
今天写一个IP地址冲突检测程序的时候,写完之后用测试用例测试,发现所写程序没有判断所输入的ip地址是否为合法的IP地址,因此自己写了一个判断输入字符串是否为合法IP地址的程序,程序思路为:判断字符串中点的个数,如果点的个数不等于3或者第一个就为’.’,即为非法IP地址,程序结束。格式符合规范后,判断每个数的范围是否在【0——255】范围内。

程序写的有点简单,反正目前能用就行,之后有时间了再进一步优化修改!

转载请注明出处:http://blog.csdn.net/bad_good_man

#include<stdio.h>
#include<string.h>
#include<sys/socket.h>
#include<math.h>
#include<stdlib.h>

int main(int argc, char *argv[])
{
/* int len;
//判断输入的IP地址的长度
len = strlen(argv[1]);
printf("IP地址的长度为:%d\n",len);
//此处想采用函数inet_aton来判断,但是发现如下情况下,inet_aton仍然返回成功。
// = inet_aton("1234568952");
//存储IP地址 */
char ip[20];
strcpy(ip,argv[1]);
printf("the ip is: %s\n",ip);
int i,j,k = 0;
int ip_len = strlen(ip);
printf("the length of the ip is : %d\n",ip_len);
char ip_inter[4]; //ip中的点数
for(i=0,j=0;i<ip_len;i++)
{
if(ip[i] == '.')
{
ip_inter[j] = i;//记录点的位置
j++;
k++;//统计字符串中的点数
//continue;
}
}

//ip地址中点的个数,若点的个数少于3个或者第一个为.则为非法IP地址
if((k != 3) || (ip[0] == '.'))
{
printf("this is illegal ip address!please input the write ip!!\n");
exit(0);
}
//判断第一个点之前的数是否在0——255范围内
printf("第一个点的位置:%d\n",ip_inter[0]);
int num1=ip_inter[0];
int i1;
float sum1=0.0;
for(i1 = 0; i1 < num1; i1++)
{
printf("%d\n",(ip[i1]-48));
sum1 += (ip[i1]-48) * pow(10.0,(num1-1-i1));
}
printf("ip 的第一个数为:%f\n",sum1);
//判断ip第一个数的范围是否在【0-255】
if(0 > sum1 || sum1 >= 256)
{
printf("illegal ip!please enter again!\n");
exit(0);
}

//判断第二个数的范围
printf("第二个点的位置:%d\n",ip_inter[1]);
int num2=ip_inter[1];
int i2;
float sum2=0.0;
for(i2 = num1+1; i2 < num2; i2++)
{
printf("%d\n",(ip[i2]-48));
sum2 += (ip[i2]-48) * pow(10.0,(num2-1-i2));
}
printf("ip 的第二个数为:%f\n",sum2);
//判断ip第2个数的范围是否在【0-255】
if(0 > sum2 || sum2 >= 256)
{
printf("illegal ip!please enter again!\n");
exit(0);
}

//判断第三个数的范围
printf("第三个点的位置:%d\n",ip_inter[2]);
int num3=ip_inter[2];
int i3;
float sum3=0.0;
for(i3 = num2+1; i3 < num3; i3++)
{
printf("%d\n",(ip[i3]-48));
sum3 += (ip[i3]-48) * pow(10.0,(num3-1-i3));
}
printf("ip 的第三个数为:%f\n",sum3);
//判断ip第3个数的范围是否在【0-255】
if(0 > sum3 || sum3 >= 256)
{
printf("illegal ip!please enter again!\n");
exit(0);
}

//判断第4个数的范围

int num4 = ip_len;
int i4;
float sum4=0.0;
for(i4 = num3+1; i4 < num4; i4++)
{
printf("%d\n",(ip[i4]-48));
sum4 += (ip[i4]-48) * pow(10.0,(num4-1-i4));
}
printf("\nip 的第4个数为:%f\n",sum4);
//判断ip第3个数的范围是否在【0-255】
if(0 > sum4 || sum4 >= 256)
{
printf("illegal ip!please enter again!\n");
exit(0);
}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息