码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-03-03 21:53:16      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

题目标题:

  • 判断输入的字符串是不是一个有效的IP地址

 

详细描述:

请实现如下接口

boolisIPAddressValid(constchar* pszIPAddr)

输入:pszIPAddr 字符串

输出:true 有效的IP地址,false,无效的IP地址

 

约束

  1. 输入IP为XXX.XXX.XXX.XXX格式

  2. 字符串两端含有空格认为是合法IP

  3. 字符串中间含有空格认为是不合法IP

  4. 类似于 01.1.1.1, 1.02.3.4  IP子段以0开头为不合法IP

  5. 子段为单个0 认为是合法IP,0.0.0.0也算合法IP

C语言代码:

 1 #include "IPAddressValid.h"
 2 #include <string.h>
 3 
 4 bool isIPAddressValid(const char* pszIPAddr)
 5 {
 6     // 请在此处实现
 7     if(pszIPAddr == 0 || pszIPAddr == "")
 8         return false;
 9     char *p=const_cast<char*>(pszIPAddr);
10     char *pre=0;
11     bool flag=true;
12     bool last=false;
13     int pCount=0; //point number;
14     int num=0;
15     while(*p== )//不考虑前面的空格
16         p++;
17   //if(*p==‘.‘)
18   //    return false;
19     while(*p!=\0){
20         if (*p != .){
21             if(pCount < 3 && (*p>9||*p<0))
22                 return false;
23             if(pCount == 3){
24                 if(*p !=   && (*p>9||*p<0))//
25                     return false;
26                 if(*p ==  )//第三个‘.‘后面有空格,应该为结尾的空格
27                     last = true;
28                 if(last && *p<=9&&*p>=0)
29                     return false;
30             }
31             if(flag)//新的子段开始。
32                 pre = p;
33             flag=false;
34         }else{//发现一个"."
35             pCount++;
36             if(!flag){
37                 if((p-pre>1&&*pre==0)||(p-pre>3))//排除子段以0开头,或者子段的长度大于3
38                     return false;
39                 if(p-pre == 3){
40                     num=(*pre-0)*100;
41                     num+=(*(++pre)-0)*10;
42                     num+=(*(++pre)-0);
43           
44                     if(num>255)
45                         return false;
46                 }
47             }else if(p-pre==1){//连续出现两个‘.‘
48                 return false;
49             }else
50                 return false;
51             flag=true;//下一个新的子段开始
52              pre=p;
53         }
54         p++;
55     }
56     if (pCount!=3 || *pre==.|| (p-pre>1&&*pre==0))//如果不是三个子段,或者最后一个字符为‘.‘,或者最后一个子段第一个字符为‘0‘。
57         return false;
58     num=0;
59     while(*pre<=9&&*pre>=0){
60         num=num*10;
61         num=num+(pre[0]-0);
62     
63         pre++;
64     }
65     if(num>255)
66         return false;
67 
68     return true;
69 }

 

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

标签:

原文地址:http://www.cnblogs.com/wanghui390/p/4311877.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!