C++里有没有判断一个字符串是否是合法IP地址的函数?

文章正文
发布时间:2025-07-13 23:17

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int checkRange(const char *str,int min)
{
/* printf("\t%s\t",str);*/
int i=atoi(str);
if (i>255 || i<min)
return 0;
else
return 1;
}
int checkIPStr(char *str)
/*!
const char *str the string contains the ip-address
return
0 legal format
other illegal format
*/
{
char *p;
int count=0;
if (str==NULL)
return -1;
if (!strstr(str,"."))
return -2;

p=strtok(str,".");
while (p !=NULL)
{
count+=1;
if (count==1 || count==4)
{
if ( checkRange(p,1)==0)
return -3;
}
else
{
if (checkRange(p,0)==0)
return -3;
}
p=strtok(NULL,".");
}
if (count==4)
return 0;
return -4;
}

int main(int argc,char **argv)
{
char *pstr;
if (argc != 2)
printf("usage :%s ipstring\n",argv[0]);
else
{
pstr=(char *)malloc(strlen(argv[1])+1);
strcpy(pstr,argv[1]);
switch( checkIPStr(pstr))
{
case 0:
printf("%s,is a legal ip address\n",argv[1]);
break;
case -1:
case -2:
case -3:
case -4:
default:
printf("%s,is NOT a legal ip addreaa",argv[1]);
}
free(pstr);
}

return 0;
}