您的位置:首页 > 其它

判断输入的字符串是不是一个有效的IP地址

2015-06-26 10:42 316 查看
#include "IPAddressValid.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>

int fort_fun(char *str, int *pl0, int *pl1, int *pl2);
int space_fun(char *str);
int zero_fun(char *str,int pl0, int pl1, int pl2);
char *str_abstract(char *str);

bool isIPAddressValid(const char* pszIPAddr)
{
int pl0 =0, pl1 =0, pl2 = 0;

char *string;

string = str_abstract((char *)pszIPAddr);

if(fort_fun(string, &pl0, &pl1, &pl2) == 0)
{
free(string);
return false;
}

if(space_fun(string) == 0)
{
free(string);
return false;
}

if(zero_fun(string, pl0, pl1, pl2) == 0)
{
free(string);
return false;
}

free(string);
return true;
}

/*return 1, right format; return 0, wrong format*/
int fort_fun(char *str, int *pl0, int *pl1, int *pl2)
{
int i=0;
int count = 0;

int pl[3];

while(str[i]!='\0')
{
if(str[i] == '.')
{
if(count == 3)
{
count =0;
break;
}
pl[count] = i;
count++;
}
i++;
}

*pl0 = pl[0];   //"保存.的位置"
*pl1 = pl[1];
*pl2 = pl[2];

if(count != 3)
return 0;
else
if(pl[1] - pl[0] == 1 || pl[2] - pl[1] == 1)//两个“.”连续
return 0;
else
if(pl[0] ==0 || str[pl[2]+1] == '\0') //头尾两个“.”在头尾
return 0;
else
return 1;
}

/*return 1, right space num and place; return 0, wrong space num and place*/
int space_fun(char *str)
{
int i=0;
int flag=1;

while(str[i]!='\0')
{
if(str[i] == ' ')
{
flag = 0;
break;
}
i++;
}

return flag;
}

int zero_fun(char *str,int pl0, int pl1, int pl2)
{
int i=0;

if(pl0 != 1)
if(str[0] == '0')
return 0;

if(pl1 - pl0 !=2)
if(str[pl0+1] == '0')
return 0;

if(pl2 - pl1 !=2)
if(str[pl1+1] == '0')
return 0;

if(str[pl2+2] != '\0' && str[pl2+1]!= '\0')
if(str[pl2+1] == '0')
return 0;

return 1;

}

char *str_abstract(char *str)//字符串提取
{
int i=0;
int j;

int count = 0;

int flag0 = 0, flag1 = 0;

char *start_pl;

char *data;

while(str[i] != '\0')
{
if(str[i]!=' ' && flag0 == 0)
{
flag0 = 1;
start_pl = &str[i];
}

j = i;

while(str[j]!='\0')
{
if(str[j] != ' ')
{
flag1 = 1;
break;
}
j++;
}

if(flag0 == 1 && flag1 ==1)
count++;

if(flag1 == 0)
break;

flag1 = 0;

i++;
}

data = (char *)malloc(sizeof(char)*(count+1));

for(i=0; i<count; i++)
{
data[i] = start_pl[i];
}
data[count] = '\0';

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