标签:style blog class code c tar
题目标题:
判断输入的字符串是不是一个有效的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
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))
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‘))
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;
}
-----------------------------------------------------------------------------------------------------------------------------------------
#include "IPAddressValid.h"
#include <cstring>
#include <iostream>
#include <cstdio>
using namespace std;
bool isIPAddressValid(const char* pszIPAddr)
{
// 请在此处实现
if(NULL==pszIPAddr) return false;
int lenIPAddr=strlen(pszIPAddr);
int startIndex,endIndex;
//去掉前后空格
for(startIndex=0;startIndex<lenIPAddr;startIndex++)
if(pszIPAddr[startIndex]!=‘ ‘)
break;
for(endIndex=lenIPAddr-1;endIndex>=0;endIndex--)
if(pszIPAddr[endIndex]!=‘ ‘)
break;
if(endIndex<=startIndex) return false;
char inputStr[200];
int lenInputStr=endIndex-startIndex+1;
strncpy(inputStr,&pszIPAddr[startIndex],lenInputStr);
inputStr[lenInputStr]=‘\0‘;
//查找点的合法性
int countDot=0;
for(int i=0;i<lenInputStr;i++)
{
if(inputStr[i]==‘.‘)
{
countDot++;
if(i==0||i==lenInputStr-1) return false;
if(inputStr[i-1]<‘0‘||inputStr[i-1]>‘9‘)
return false;
if(inputStr[i+1]<‘0‘||inputStr[i+1]>‘9‘)
return false;
}
}
if(countDot!=3) return false;
char *pCut;
pCut=strtok(inputStr,".");
while(NULL!=pCut)
{
int num;
sscanf(pCut,"%d",&num);
if(num!=0&&pCut[0]==‘0‘) return false;
if(num>255) return false;
pCut=strtok(NULL,".");
}
return true;
}标签:style blog class code c tar
原文地址:http://blog.csdn.net/makamus/article/details/25560235