今天写了个判断IP地址是否合法的程序,主要是锻炼对字符串的处理,一些主要的约束条件如下:
1、输入IP为XXX.XXX.XXX.XXX格式
2、字符串两端含有空格认为是合法IP
3、字符串中间含有空格认为是不合法IP
4、类似于 01.1.1.1, 1.02.3.4 IP子段以0开头为不合法IP
5、子段为单个0 认为是合法IP,0.0.0.0也算合法IP
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
bool isinteger(char ch)
{
if(ch>='0'&&ch<='9')
return true;
else
return false;
}
int chtoint(char *p)
{
int data=0;
while(*p!='\0')
{
data=data*10+*p-'0';
p++;
}
return data;
}
bool isIPAddressValid(const char* pszIPAddr)
{
if(pszIPAddr==NULL)
return false;
int datalen=0,pointlen=0;
int len=strlen(pszIPAddr)-1;
cout<<len<<endl;
if(len==-1)
return false;
char *temp=new char[len+1];
int i=0,k=0;
while(pszIPAddr[i]==' ')
i++;
while(pszIPAddr[len]==' ')
len--;
len++;
while(i<len)
{
if(pszIPAddr[i]=='.')
{
pointlen++;
if(pointlen>3||pointlen!=datalen)
return false;
i++;
}
else
{
if(!isinteger(pszIPAddr[i])||pszIPAddr[i]==' ')
return false;
while(i<len&&pszIPAddr[i]!='.')
{
temp[k++]=pszIPAddr[i];
if(k==5)
return false;
i++;
}
temp[k]='\0';
if(temp[0]=='0'&&k>=2)
return false;
else
{
if(chtoint(temp)>=0&&chtoint(temp)<=255)
datalen++;
else
return false;
}
k=0;
if(datalen>4)
return false;
}
}
if(datalen==4&&pointlen==3)
return true;
else
return false;
}
int main()
{
const char* intputstr =" .0.0.1" ;
bool flag=isIPAddressValid(intputstr);
cout<<flag<<endl;
return 0;
}