<pre name="code" class="cpp">/**
* 题目标题:
* 判断输入的字符串是不是一个有效的IP地址
*
* 请实现如下接口
* boolisIPAddressValid(constchar* pszIPAddr)
*
* 输入:pszIPAddr 字符串
* 输出:true 有效的IP地址,false,无效的IP地址
*
* 约束:
* 输入IP为XXX.XXX.XXX.XXX格式
* 字符串两端含有空格认为是合法IP
* 字符串中间含有空格认为是不合法IP
* 类似于 01.1.1.1, 1.02.3.4 IP子段以0开头为不合法IP
* 子段为单个0 认为是合法IP,0.0.0.0也算合法IP
*/
#include <string>
#include <vector>
using namespace std;
bool isIPAddressValid(const char* pszIPAddr)
{
if (pszIPAddr == NULL)
return false;
bool bSpace = false;
const char *iter = pszIPAddr;
string strTemp;
vector<string> vstrIP;
int nCount = 0;//点的个数
int i = 0;
int nlen = (int)strlen(pszIPAddr);
while (i < nlen)
{
if (iter[i] == ' ')
{
if (bSpace && i+1 < nlen && iter[i+1] != ' ')
return false;
i++;
continue;
}
if (i+1 <= nlen && iter[i+1] == ' ')
bSpace = true;
if (iter[i] == '.')
{
vstrIP.push_back(strTemp);
i++;
nCount++;
strTemp = "";
continue;
}
strTemp += iter[i];
i++;
}
vstrIP.push_back(strTemp);
if (nCount != 3)
return false;
else
{
for (int i = 0; i < (int)vstrIP.size(); ++i)
{
int len = (int)vstrIP[i].size();
if (len < 1 || (vstrIP[i][0] == '0' && len >= 2))
return false;
int n = atoi(vstrIP[i].c_str());
if (n < 0 || n > 255)
return false;
}
}
return true;
}
/* 还有情况没考虑到 */