题目标题:
- 判断输入的字符串是不是一个有效的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; }
华为OJ IP地址判断有效性
时间: 2024-10-22 21:58:58