输入一个字符串,判断是否是合法的IPV4地址
首先,IPV4 地址
(1),三个点 “ . ”
(2),四部分整数,0~255 之间
(3),前导数不能是0,例如 012.1.1.1 非法
#include<iostream>
#include<stdlib.h>
#include<string.h>
using namespace std;
/*
1、只有三个点 , 四部分,每个数都在 0 ~ 255
2、数字不能是 0开头 如:012.1.1.1
*/
bool IsIpv4(char*str)
{
char* ptr;
int count = 0;
const char *p = str;
//1、判断是不是三个 ‘.’
//2、判断是不是先导0
//3、判断是不是四部分数
//4、第一个数不能为0
while(*p !='\0')
{
if(*p == '.')
count++;
p++;
}
if(count != 3) return false;
count = 0;
ptr = strtok(str,".");
while(ptr != NULL)
{
count++;
if(ptr[0] == '0' && isdigit(ptr[1])) return false;
int a = atoi(ptr);
if(count == 1 && a == 0) return false;
if(a<0 || a>255) return false;
ptr = strtok(NULL,".");
}
if(count == 4) return true;
else return false;
}
int main()
{
char buf[100];
while(cin>>buf,buf[0] != '#')
{
if(IsIpv4(buf))
{
cout<<"合法"<<endl;
}
else
{
cout<<"非法"<<endl;
}
}
return 0;
}