• [华为机试练习题]5.IP地址推断有效性


    题目

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

    知识点: 字符串
    题目来源: 111
    练习阶段: 中级

    代码

    /*---------------------------------------
    *   日期:2015-06-25
    *   作者:SJF0115
    *   题目:IP地址推断有效性
    *   来源:华为上机
    -----------------------------------------*/
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    bool isIPAddressValid(const char* pszIPAddr)
    {
        if(pszIPAddr == NULL)
        {
            return false;
        }//if
        int size = strlen(pszIPAddr);
        // 去除前导0
        int start = 0;
        while(pszIPAddr[start] == ' ')
        {
            ++start;
        }//while
        // 去除后导0
        int end = size - 1;
        while(pszIPAddr[end] == ' ')
        {
            --end;
        }//while
        int num = 0;
        int pointCount = 0;
        int first = start;
        for(int i = start;i <= end+1;++i)
        {
            if(pszIPAddr[i] >= '0' && pszIPAddr[i] <= '9')
            {
                num = num * 10 + pszIPAddr[i] - '0';
            }//if
            else if(pszIPAddr[i] == '.' || i == end + 1)
            {
                if(i == start || (pszIPAddr[i-1] < '0' || pszIPAddr[i-1] > '9'))
                {
                    return false;
                }
                // 验证.个数
                if(pszIPAddr[i] == '.')
                {
                    ++pointCount;
                    if(pointCount > 3)
                    {
                        return false;
                    }//if
                }//if
                // 验证数据
                if(num > 255 || num < 0)
                {
                    return false;
                }//if
                // 以0开头且不为0 比如:023
                if(num != 0 && pszIPAddr[first] == '0')
                {
                    return false;
                }//if
                first = i+1;
                num = 0;
            }//else
            else
            {
                return false;
            }//else
        }//for
        if(pointCount != 3)
        {
            return false;
        }
        return true;
    }
  • 相关阅读:
    snmp简介
    PKI简介
    小程序收藏
    mysql数据库中同一DB内倒表指令
    核心层+汇聚层+接入层
    eng
    rmon简介
    几个常用的JavaScript字符串处理函数
    C# 特性(Attribute)学习 关于 .net中[]的解释
    C#操作Excel文件(读取Excel,写入Excel)
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7281746.html
Copyright © 2020-2023  润新知