您的位置:首页 > 其它

华为oj-判断输入的字符串是不是一个有效的IP地址

2015-03-03 20:32 295 查看
题目标题:

判断输入的字符串是不是一个有效的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

C语言代码:

#include "IPAddressValid.h"
#include <string.h>

bool isIPAddressValid(const char* pszIPAddr)
{
// 请在此处实现
if(pszIPAddr == 0 || pszIPAddr == "")
return false;
char *p=const_cast<char*>(pszIPAddr);
char *pre=0;
bool flag=true;
bool last=false;
int pCount=0; //point number;
int num=0;
while(*p==' ')//不考虑前面的空格
p++;
//if(*p=='.')
//    return false;
while(*p!='\0'){
if (*p != '.'){
if(pCount < 3 && (*p>'9'||*p<'0'))
return false;
if(pCount == 3){
if(*p != ' ' && (*p>'9'||*p<'0'))//
return false;
if(*p == ' ')//第三个'.'后面有空格,应该为结尾的空格
last = true;
if(last && *p<='9'&&*p>='0')
return false;
}
if(flag)//新的子段开始。
pre = p;
flag=false;
}else{//发现一个"."
pCount++;
if(!flag){
if((p-pre>1&&*pre=='0')||(p-pre>3))//排除子段以0开头,或者子段的长度大于3
return false;
if(p-pre == 3){
num=(*pre-'0')*100;
num+=(*(++pre)-'0')*10;
num+=(*(++pre)-'0');

if(num>255)
return false;
}
}else if(p-pre==1){//连续出现两个'.'
return false;
}else
return false;
flag=true;//下一个新的子段开始
pre=p;
}
p++;
}
if (pCount!=3 || *pre=='.'|| (p-pre>1&&*pre=='0'))//如果不是三个子段,或者最后一个字符为'.',或者最后一个子段第一个字符为'0'。
return false;
num=0;
while(*pre<='9'&&*pre>='0'){
num=num*10;
num=num+(pre[0]-'0');

pre++;
}
if(num>255)
return false;

return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: