#include "IPAddressValid.h"
#include <stdio.h>
#include <iostream>
using namespace std;
bool isOnePartValid(const char* cOnePartIPAddr, int len)//判断一个字段是不是合法
{
if (NULL == cOnePartIPAddr || len <= 1)
{
return false;
}
if ('0' == cOnePartIPAddr[0] && 2 != len)//以0开头的字段不为0非法
{
return false;
}
int ipAddr =0;
int iCur = 0;
while ('\0' != cOnePartIPAddr[iCur])
{
if ('0'<= cOnePartIPAddr[iCur] && cOnePartIPAddr[iCur] <='9')
{
ipAddr = ipAddr*10 + cOnePartIPAddr[iCur]- '0';
}
else
{
return false;
}
iCur++;
}
if (ipAddr >= 0 && ipAddr <=255)
{
return true;
}
else
{
return false;
}
}
bool isIPAddressValid(const char* pszIPAddr)
{
// 请在此处实现
if (NULL == pszIPAddr)
{
return false;
}
int l = strlen(pszIPAddr);
if (l <7 || l > 15)
{
return false;
}
int iCur =0;
int iIpLen =0;
while (' ' == pszIPAddr[iCur])//去除前面空格
{
iCur++;
iIpLen++;
}
int begin = iCur;
while ('\0' != pszIPAddr[iCur])
{
iCur++;
iIpLen++;
}
int end = iIpLen;
for (int i = iIpLen-1 ; i >= begin; --i)//去除字符串尾部的空格
{
if (' ' == pszIPAddr[i])
{
end--;
}
else
{
break;
}
}
char cOnePart[128];
int count = 0;
for (int i = begin; i <= end; i++)
{
memset(cOnePart, 0, sizeof(char) * 128);
int iOnePartCur =0;
int onePartLen =0;
while (i < end && '.' != pszIPAddr[i])
{
cOnePart[iOnePartCur] = pszIPAddr[i];
iOnePartCur++;
i++;
onePartLen++;
}
cOnePart[iOnePartCur] = '\0';
onePartLen++;
if (!isOnePartValid(cOnePart, onePartLen))
{
return false;
}
else
{
count ++;
}
}
if (4 == count )
{
return true;
}
else
{
return false;
}
}
int main()
{
const char* pazIPAddress = "100.0.0.";
bool isIP = isIPAddressValid(pazIPAddress);
return 0;
}