标签:
题目标题:
判断输入的字符串是不是一个有效的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
这个题目也非常简单,但是我们的代码经不住测试,为什么呢,因为这个格式要求默认有很多,我们要做细心人!
给出多组测试数据:
/**********************************
NULL
0.0.0.0
01.2.0.6
255.2.256.0
256.22.234
34 .45.345.6
2. 3.3.3
0.1.0.0
00.00.32.67
**********************************/
下面给出代码,欢迎补充!
#include "IPAddressValid.h"
#include<iostream>
using namespace std;
#include "IPAddressValid.h"
#include <cstring>
#include <iostream>
#include <cstdio>
using namespace std;
bool isIPAddressValid(const char* pszIPAddr)
{
if(pszIPAddr==NULL || pszIPAddr=="") return false;
// 请在此处实现
int slen=strlen(pszIPAddr);
// cout<<slen<<endl;
int i,j,k,m,n,sum;
int sublen[10];
const char *ss=pszIPAddr;
<span style="white-space:pre"> </span><span style="white-space:pre"> </span>//去除头尾空格 for(i=0;i<slen && ss[i]==' ';i++); if(i==slen)return false; for(j=slen-1;j>=0 && ss[j]==' ';j--); if(j==0)return false; if(i>=j)return false;
<span style="white-space:pre"> </span>//判断字符串中间是否有空格,如果有则false for(k=i;k<j;k++) if(ss[k]==' ')return false; // cout<<i<<" "<<j<<endl;
<span style="white-space:pre"> </span>//记录字符串出现的‘.',如果点出现在第一个字符或者相邻的元素也是点则false
m=0;
for(k=i;k<=j;k++)
{
if(ss[k]=='.')
{
sublen[m++]=k;
if(k==i || k==j) return false;
if(ss[k+1]=='.')return false;
}
}<span style="white-space:pre"> </span>//如果点数不是3个则false if(m!=3)return false; sublen[m++]=j+1; //for(k=1;k<m;k++) // if((sublen[k]-sublen[k-1])>4)return false; // for(k=0;k<m;k++) // cout<<sublen[k]<<" "; // cout<<endl;
<span style="white-space:pre"> </span>//判断各子段是否为0开头,如果是则判断是不是本子段只有0,如果不是则false
n=0;k=i;
while(n<m){
// for(k=i;k<sublen[n] && ss[k]=='0';k++);
// if(ss[k]!='0' && k<sublen[n] && k>i)return false;
if(ss[k]=='0')
{
if(k+1<slen && ss[k+1]!='.')return false;
}
k=sublen[n]+1;
n++;
}<span style="white-space:pre"> </span>//判断各子段转化的整数是否在0~255之间,如果不是则false
n=0;
while(n<m){
sum=0;
for(k=i;k<sublen[n];k++)
{
if(ss[k]<'0' || ss[k]>'9')return false;
sum=sum*10+ss[k]-'0';
}
if(sum>255)return false;
i=sublen[n]+1;
n++;
}
return true;
}
华为OJ测试题——判断输入的字符串是不是一个有效的IP地址(附世上最全测试数据)
标签:
原文地址:http://blog.csdn.net/wljwsj/article/details/45367099