📄 ip地址的合法性判断.txt
字号:
#include<iostream>
#include<ctype.h>
#include<math.h>
#include<string.h>
using namespace std;
void main(int argc, char *argv[])
{
if(argc!=2)
{
cout<<endl<<"请按以下格式输入命令行:IpAddress ip_address"<<endl;
return;
}
char *ipaddr;
ipaddr=new char[strlen(argv[1])];
strcpy(ipaddr,argv[1]);
cout<<endl<<"开始分析IP地址";
if(strlen(ipaddr)>15)
{
cout<<endl<<"IP地址总长度不能超过15!"<<endl;
return ;
}
int dotnum=0;
for(int i=0;i<strlen(ipaddr);i++)
{
if(isdigit(ipaddr[i])==0 && ipaddr[i]!='.')
{
cout<<endl<<"IP地址中含有非法字符!"<<endl;
return ;
}
if(ipaddr[i]=='.')
dotnum++;
}
if(dotnum!=3)
{
cout<<endl<<"IP地址中分隔符只能为3个!"<<endl;
return;
}
for(i=0;i<strlen(ipaddr)-1;i++)
{
if(ipaddr[i]=='.' && ipaddr[i+1]=='.')
{
cout<<endl<<"IP地址中出现连续的分隔符!"<<endl;
return;
}
}
int len;
len=strlen(ipaddr);
if(ipaddr[len-1]=='.')
{
cout<<endl<<"IP地址最后们不能为分隔符!"<<endl;
return;
}
char temp[4][15];
for(i=0;i<4;i++)
for(int j=0;j<15;j++)
temp[i][j]='\0';
int ip[4]={0,0,0,0};
int j=0;
i=0;
for(int k=0;k<strlen(ipaddr);k++)
{
if(ipaddr[k]!='.')
{
temp[i][j]=ipaddr[k];
j++;
}
else
{
i++;
j=0;
}
}
for(i=0;i<4;i++)
{
len=strlen(temp[i]);
if(len>3)
{
cout<<endl<<"IP地址每位长度不能超过3!"<<endl;
return;
}
switch(len)
{
case 3:
{
while(len!=0)
{
ip[i]+=(temp[i][len-1]-48)*pow(10,3-len);
len--;
}
break;
}
case 2:
{
while(len!=0)
{
ip[i]+=(temp[i][len-1]-48)*pow(10,2-len);
len--;
}
}
break;
default:
{
while(len!=0)
{
ip[i]+=(temp[i][len-1]-48)*pow(10,1-len);
len--;
}
}
}
}
for(i=0;i<4;i++)
{
if(ip[i]>255)
{
cout<<endl<<"IP地址数字不能超过255!"<<endl;
return;
}
}
if(ip[0]<1)
cout<<endl<<"IP地址首位不能为0!"<<endl;
if(ip[0]>=1 && ip[0]<=127)
cout<<endl<<argv[1]<<"是A类IP地址!"<<endl;
if(ip[0]>=128 && ip[0]<=191)
cout<<endl<<argv[1]<<"是B类地址!"<<endl;
if(ip[0]>=192 && ip[0]<=223)
cout<<endl<<"是C类IP地址!"<<endl;
if(ip[0]>=224)
cout<<endl<<argv[1]<<"是其他类型IP地址!"<<endl;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -