代码如下:
/*********************************************************
*功能:判断输入一个IP地址字符串是否是合法?
*作者:lml 时间:2020年4月15日20:34:40
**********************************************************/
#include <stdio.h>
#include <stdlib.h>
int do_judgeIP(char *buf)
{
int i=0,j=0;
int num=0,dot=0,dn=0;
int kdot[3]={0};
char dip[4]="";
while(*(buf+i) != '\0')
{
//检测是否是3个点,ip都是3个点隔开每个段
//检测每个段是否为数字
if(*(buf+i) == '.'){
kdot[dot] = i; //记录每个点的位置,下面用到
dot++;
}
if(*(buf+i) != '.'){
if(*(buf+i)<'0' || *(buf+i)>'9'){
printf("error!,IP must is number!\n");
return -1;
}
}
num++;
i++;
}
//判断输入的字符数量是否在最大或最小之内
if(num>15 || num<7 || dot!=3)
{
printf("error ip format!\n");
return -1;
}
//第一个段在1~255之间
for(i=0;i<kdot[0];i++){
dip[i] = *(buf+kdot[0]-i-1);
}
if(atoi(dip)>255 || atoi(dip)<1){
printf("first IP must is 1~255\n");
return -1;
}
//后面的段在0~255之间
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if((kdot[i]) != 0){
if(*(buf+kdot[i]+j+1) != '.'){
dn++;
}
}
}
if(dn==3){
for(i=0;i<3;i++){
dip[0] = *(buf+kdot[i]+1);
dip[1] = *(buf+kdot[i]+2);
dip[2] = *(buf+kdot[i]+3);
if(atoi(dip)>255){
printf("IP must is 0~255\n");
return -1;
}
}
}
dn=0;
}
//输入正确,就打印下面
printf("input right!\n");
}
int main(int argc, const char *argv[])
{
char ipbuf[20]="";
printf("input ip:");
fflush(stdout);
scanf("%s",ipbuf);
getchar();
do_judgeIP(ipbuf);
return 0;
}
结束。